EventInfoクラスには、直接イベントを発行するメソッドは用意されていません。 そのためイベント発行時の動作と同等の処理を独自に記述する必要があります。 EventInfoクラスからは以下のような手順をとることでイベントの発行を行うことができます。
- イベントハンドラのデリゲートを格納しているフィールドのFieldInfoを取得する
- 取得したFieldInfoからイベントハンドラを格納しているMulticastDelegateを取得する
- MulticastDelegate.GetInvocationListメソッドを使ってイベントハンドラとして割り当てられているメソッドのリスト(MethodInfoの配列)を取得する
- 取得したMethodInfoひとつずつに対してメソッドの呼び出しを行う
C#とVBではイベントハンドラを格納しているフィールド名が異なる点に注意が必要です。 例えばイベント名がClick
の場合、C#ではフィールドClick
、VBではフィールドClickEvent
にイベントハンドラが格納されます。
上記の処理を具体的に実装すると次のようになります。
MulticastDelegate.GetInvocationListメソッドについてはデリゲートの機能 §.呼び出されるメソッド・インスタンスの取得 (Method, Target, GetInvocationList)で解説しています。