イベントの発生
更新 : 2007 年 11 月
イベント機能は、イベント データを提供するクラス、イベント デリゲート、およびイベントを発生させるクラス、という 3 つの相互に関連しあう要素によって提供されます。.NET Framework には、イベントに関連するクラスおよびメソッドに対する名前付け規則があります。あるクラスから EventName, という名前のイベントを発生させるには、次の要素が必要です。
イベント データを保持する、EventNameEventArgs という名前のクラス。このクラスは、System.EventArgs から派生している必要があります。
EventNameEventHandler という名前の、イベントのデリゲート。
イベントを発生させるクラス。このクラスには、イベント宣言 (EventName) および、このイベントを発生させるメソッド (OnEventName) が必要です。
イベント データ クラスおよびイベント デリゲート クラスは、.NET Framework クラス ライブラリまたはサードパーティ製クラス ライブラリで既に定義されている場合があります。その場合は、これらのクラスを定義する必要はありません。たとえば、イベントでカスタム データを使用しない場合には、イベント データとして System.EventArgs を使用し、デリゲートとして System.EventHandler を使用できます。
event キーワードを使用して、クラスにイベント メンバを定義します。コンパイラが、クラスで event キーワードを検出すると、コンパイラは次に示すようなプライベート メンバを作成します。
private EventNameHandler eh = null;
add_EventName および remove_EventName という 2 つのパブリック メソッドも作成されます。これらのメソッドは、イベント デリゲート eh に対してデリゲートを結合または削除できるイベント フックです。詳細はプログラマには見えないようになっています。
メモ : |
---|
C# および Visual Basic 2005 以外の言語では、イベント メンバに対応するコードをコンパイラが自動的に生成しない場合があるため、イベント フックとプライベート デリゲート フィールドを明示的に定義する必要が生じる可能性があります。 |
イベント実装の定義が終了したら、イベントを発生させるタイミングを決定する必要があります。イベントを発生させるには、イベントを定義したクラスまたは派生クラスにあるプロテクトされた OnEventName メソッドを呼び出します。OnEventName メソッドは、各種のイベント固有のデータを渡して、デリゲートを呼び出すことによってイベントを発生させます。イベントのデリゲート メソッドでは、そのイベントに対応するアクションを実行したり、イベント固有のデータを処理できます。
メモ : |
---|
プロテクトされた OnEventName メソッドを使用すると、デリゲートをアタッチせずに、派生クラスでイベントをオーバーライドすることもできます。派生クラスでは、登録されたデリゲートがイベントを必ず受信できるように、常に基本クラスの OnEventName メソッドを呼び出す必要があります。 |
他のクラスで発生されたイベントを処理するには、そのイベントにデリゲート メソッドを追加します。.NET Framework におけるイベントのデリゲート モデルに習熟していない場合は、「イベントとデリゲート」を参照してください。