2011-12-29 27 views
60

Gần đây tôi đã tự hỏi nếu có bất kỳ sự khác biệt đáng kể giữa mã này:Tuỳ chỉnh EventHandler vs EventHandler <EventArgs>

public event EventHandler<MyEventArgs> SomeEvent; 

Và một điều này:

public delegate void MyEventHandler(object sender, MyEventArgs e); 
public event MyEventHandler SomeEvent; 

Cả hai đều làm điều tương tự và Tôi đã không thể nói bất kỳ sự khác biệt nào. Mặc dù tôi đã nhận thấy rằng hầu hết các lớp của Khuôn khổ .NET sử dụng một đại biểu xử lý sự kiện tùy chỉnh cho các sự kiện của họ. Có lý do cụ thể nào cho điều này không?

Trả lời

67

Bạn nói đúng; họ làm điều tương tự. Vì vậy, bạn có lẽ nên thích cái cũ hơn vì nó rõ ràng hơn và đòi hỏi ít đánh máy hơn.

Lý do rất nhiều lớp .NET Framework có đại biểu xử lý sự kiện tùy chỉnh của riêng họ là vì chúng được viết trước khi Generics (cho phép cú pháp viết tắt) được giới thiệu trong phiên bản 2.0. Ví dụ, gần như tất cả các thư viện WinForms đã được viết trước khi Generics, và trở lại trong những ngày đó, các hình thức sau là chỉ cách làm việc.

+0

Cảm ơn câu trả lời của bạn. Nó làm mọi thứ rõ ràng hơn với tôi. – haiyyu

-1

Cách thứ hai mang lại sự linh hoạt và an toàn hơn cho loại. Có ít phương pháp với chữ ký tương ứng => ít chỗ hơn cho một sai lầm. Đại biểu tùy chỉnh cho phép chỉ định chính xác các thông số bạn cần (hoặc chỉ định không có ai) - không có người gửi + args hàng hóa bái.

+1

Tò mò lý do tại sao điều này được downvoted, có vẻ như một lợi ích hoàn toàn hợp lý của xử lý sự kiện tùy chỉnh. – Cerzi

Các vấn đề liên quan