Tôi khá hài lòng với sự hiểu biết của tôi về mô hình sự kiện .NET. Tôi nghĩ rằng tôi có thể hiểu nhầm một sắc thái nhỏ của hệ thống.
Khi tôi bắt đầu đưa các sự kiện vào các lớp học của mình, tôi sẽ sử dụng cách tiêu chuẩn như vậy:
public event EventHandler<MyEventArgs> MyEvent;
Điều này có nghĩa là bất cứ điều gì đăng ký vào sự kiện sẽ cần một phương thức như:
void HandleThatEvent(object sender, MyEventArgs args){...}
Điều này thật tuyệt, nhưng tôi thấy rằng tôi sẽ hiếm khi quan tâm đến người gửi, vì vậy nó đã tạo ra rất nhiều chữ ký phương thức.
Vì vậy, tôi chuyển sang khai báo các loại đại biểu của riêng tôi
public delegate void MyEventHandler(SomeClass argument);
Điều này làm giảm sự lộn xộn, nhưng để lại cho tôi một vấn đề nhỏ khi viết các trình xử lý:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
Vì vậy, tôi sẽ phải quay lại tuyên bố của đại biểu và xem xét và sau đó quay lại và viết chúng vào, hoặc biên dịch nó và chờ đợi để được nói.
Vì vậy, bây giờ thay vào đó, tôi chỉ đang sử dụng Action
, Action<T>
hoặc bất kỳ mẫu nào phù hợp.
public event Action<SomeClass> MyEvent;
Để tôi có thể di chuột qua sự kiện và được cho biết những thông số mà nó mong đợi.
Câu hỏi của tôi, sau tất cả những điều đó: Có cách thực hành tốt nhất để khai báo các sự kiện trong C # không? Tôi có nên quay lại EventHandler<T>
đường đi, hay được Action<T>
chấp nhận?