イベントに予め “空の匿名メソッド” を登録しておくことで、イベント呼び出し時にnullチェックを逐一記述する必要がなくなる。Null Objectパターン*1。
public delegate void SomeHandler(object sender, SomeEventArgs e); public event SomeHandler SomeEvent = delegate {}; // ★ protected virtual void OnRaiseSomeEvent(SomeEventArgs e) { SomeEvent(this, e); }
このパターンを利用しない場合、イベント呼び出し処理は下記のようになる。*2
protected virtual void OnRaiseSomeEvent(SomeEventArgs e) { SomeHandler handler = SomeEvent; if (handler != null) { // nullチェックが必要 handler(this, e); } }
メモ:★では匿名メソッドのパラメータリストを省略し、デリゲート型SomeHandler
からシグネチャを推論させている。MSDNも参照のこと。(ラムダ式だとこれが出来ない)
関連URL