7
在從組件派生類的我有時會看到聲明如下事件:將委託實例添加到Component.Events(EventHandlerList)有什麼好處?
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);
}
而不只是:
public event EventHandler<MyEventArgs> Load;
protected virtual void OnLoad(MyEvent e)
{
if (Load != null)
Load(this, e);
}
我很想重構採用更短的方法,但我很猶豫如果使用我缺少的組件EventHanderList有一些優點。
我目前能想到的唯一的優點是:
- 當組件配置,在EventHandlerList所有項目都刪除,有效地自動脫鉤事件處理程序。
- 由於所有附加的委託進入單個EventHandlerList,可能會減少內存碎片。
還有別的嗎?
(這是不是關於一般使用明確的附加+消除了對事件的問題。)