[C#] event キーワード

delegateを使ったcallbackは
機能を提供する側(呼ばれる側)が

  • delegate 型の宣言 (pubic)
  • delegate 型のオブジェクトの定義 (private)
  • delegateに登録・削除するためのhelper 関数 (public)

を用意する。
使う側ではこれに対して

  • 呼ばれる関数を作成
  • helper関数を呼び出し、関数をさしたdelegateを登録

とする。helper関数を省略するとちょっと簡単になるが、delagateオブジェクトをpublicにしてしまうことが危険なためそれはやるべきではない。
決まった手順で実装できるため、これらをコンパイラにやらせる簡単な記法としてeventキーワードが導入された。
eventキーワードはコンパイラにより、delegateへのadd, removeの関数として展開されている。
たとえば、Systemが用意しているINotifyPropertyChangedインタフェースのdelegateとして

public delegate void PropertyChangedEventHandler (
Object sender,
PropertyChangedEventArgs e
)

がある。
このdelegate型オブジェクトを呼ぶイベントは以下のように定義する。

public event PropertyChangedEventHandler PropertyChanged;

そして、このeventに自分の関数を登録するために

PropertyChanged += new PropertyChangedEventHandler (MyHandler);

のようにする。
実際にはこのeventおよびdelegateはWPFで使用されることが多いようなので典型的な使い方ではないかもしれない。
このようにすると、イベントが次のように呼ばれた時

PropertyChanged("SomeEvent");

MyHandler関数が呼び出される。

広告
%d人のブロガーが「いいね」をつけました。