2009-06-21 13 views
11

Có một câu hỏi đã được trả lời là In C#, isn't the observer pattern already implemented using Events?Mẫu quan sát được triển khai trong C# với các đại biểu?

Nó hỏi nếu mẫu quan sát đã được thực hiện trong C# sử dụng sự kiện chưa.

Trong khi tôi nhận được các sự kiện và mẫu người quan sát, không phải mẫu người quan sát thực sự chỉ là đại biểu và sự kiện là một triển khai tiếp theo?

+0

Bạn có thể giải thích chi tiết về câu hỏi của mình không? Bạn dường như nhận thức được câu hỏi khác và câu trả lời của nó, vì vậy bạn dường như đang hỏi điều gì đó ngoài điều đó, nhưng nó không rõ ràng với tôi nó là gì. –

Trả lời

28

Bạn là chính xác. Một sự kiện chỉ đơn giản là một đại biểu với một số chức năng hơi khác nhau. Tất cả các mẫu quan sát viên có thể được thực hiện với các đại biểu mà không bao giờ chạm vào từ khóa event.

Sau đó, bạn có thể quan tâm đến từ khóa "sự kiện" thực sự mang lại cho bảng.

  • Sự kiện có thể là một phần của một giao diện, trong khi trường đại biểu thường xuyên có thể không
  • Sự kiện có thể không được viện dẫn bởi lớp bên ngoài, nhưng các đại biểu thường xuyên có thể
  • Sự kiện có accessors bổ sung (thêm và loại bỏ) mà bạn có thể ghi đè và cung cấp chức năng tùy chỉnh cho

Chỉnh sửa: Here's a great writeup với so sánh mã IL giữa các sự kiện và đại biểu. (Gợi ý: nó khá giống nhau).

+0

@womp cảm ơn bài viết sâu sắc – TheVillageIdiot

+0

@womp, về điểm bullet đầu tiên của bạn, là 'Action 'không phải là đại biểu có thể là một phần của giao diện không? –

+0

@womp, về điểm bullet đầu tiên của bạn, là 'Action ' không phải là đại biểu có thể là một phần của giao diện không? 'giao diện công khai ITest { void SupplyCallbackMethod (Hành động gọi lại); } ' –