Trong lớp bắt nguồn từ một phần đôi khi tôi thấy sự kiện tuyên bố như:Ưu điểm của việc thêm các cá thể ủy nhiệm vào Component.Events (EventHandlerList) là gì?
private static readonly object LoadEvent = new object();
public event EventHandler<MyEventArgs> Load
{
add { Events.AddHandler(LoadEvent, value); }
remove { Events.RemoveHandler(LoadEvent, value); }
}
protected virtual void OnLoad(MyEventArg e)
{
var evnt = (EventHandler<MyEventArg>)Events[LoadEvent];
if (evnt != null)
evnt(this, e);
}
Thay vì chỉ:
public event EventHandler<MyEventArgs> Load;
protected virtual void OnLoad(MyEvent e)
{
if (Load != null)
Load(this, e);
}
Tôi bị cám dỗ để Refactor để sử dụng phương pháp ngắn hơn, nhưng tôi lưỡng lự trong trường hợp có một số ưu điểm khi sử dụng Component EventHanderList mà tôi đang thiếu.
Những lợi thế duy nhất mà tôi hiện có thể nghĩ đến là:
- Khi các thành phần được xử lý, tất cả các mục trong EventHandlerList được loại bỏ, hiệu quả tự động unhooking xử lý sự kiện.
- Có thể ít phân mảnh bộ nhớ hơn vì tất cả các đại biểu đính kèm sẽ tham gia vào EventHandlerList đơn lẻ.
Còn gì khác không?
(Đây là không một câu hỏi về việc sử dụng chung của add rõ ràng + loại bỏ các sự kiện.)