在从组件派生的类中,我有时会看到声明如下的事件:
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);
}
我很想重构以使用更短的方法,但如果使用我缺少的 Component EventHanderList 有一些优势,我会犹豫不决。
我目前能想到的唯一优点是:
- 当组件被释放时,EventHandlerList 中的所有项目都会被移除,从而有效地自动解除事件处理程序的挂钩。
- 由于所有附加的委托都进入了单个 EventHandlerList,因此内存碎片可能更少。
还有别的事吗?
(这不是关于在事件上显式添加 + 删除的一般使用的问题。)