コンポーネントから派生したクラスでは、次のように宣言されたイベントが表示されることがあります。
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);
}
短いメソッドを使用するようにリファクタリングしたいのですが、欠落しているComponentEventHanderListを使用することにいくつかの利点がある場合に備えて躊躇しています。
私が現在考えることができる唯一の利点は次のとおりです。
- コンポーネントが破棄されると、EventHandlerList内のすべてのアイテムが削除され、事実上、イベントハンドラーのフックが自動的に解除されます。
- アタッチされたすべてのデリゲートが単一のEventHandlerListに入るため、メモリの断片化が少なくなる可能性があります。
他に何かありますか?
(これは、イベントでの明示的な追加と削除の一般的な使用に関する質問ではありません。)