リフレクションを使用して、イベント ハンドラーをイベントに追加しています。
var eventInfo = type.GetEvent(eventName);
MethodInfo mi = GetType().GetMethod("TestMethod",
BindingFlags.Instance | BindingFlags.NonPublic);
var delegateForMethod = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, mi);
eventInfo.AddEventHandler(this, delegateForMethod);
これは、イベントが発生したときにテスト メソッドを正常に呼び出しますが、このメソッドを呼び出したイベントの名前を知る必要があります...
void TestMethod(object sender, EventArgs e)
{
// I know the sender, but which event was fired on the sender?
}
これが必要な理由は、ハンドラーをさまざまなタイプ、さまざまなイベントに接続し、それらすべてを 1 つのメソッドにチャネルするこのジェネリック レジスタ メソッドがあるためです。テスト メソッドが起動したら、そのメモを取り出し、その情報を使用して、「目的の」イベントが起動したことを正しいオブジェクトに通知する必要があります。-- しかし、これを知るには、イベント名とタイプを知る必要があります。
たとえば、レジスターで、オブジェクト O のタイプ X にイベント A を追加しました... テスト メソッドでトリガーされたのを確認したら、それがタイプ X のイベント A であったことを知る必要があるため、オブジェクト O に a で通知できます。その上の特定のインターフェースメソッド。