【发布时间】:2012-08-07 10:04:20
【问题描述】:
在从组件派生的类中,我有时会看到声明如下的事件:
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,内存碎片可能更少。
还有别的吗?
(这不是关于在事件中显式添加 + 删除的一般用法的问题。)
【问题讨论】: