1. ホーム
  2. c#

空のC#イベントハンドラを自動作成する

2023-10-05 08:31:45

質問

C#では、ハンドラを持たないイベントを発生させることはできません。したがって、各呼び出しの前に、イベントがnullであるかどうかを確認する必要があります。

if ( MyEvent != null ) {
  MyEvent( param1, param2 );
}

私は自分のコードをできるだけきれいに保ち、これらのNULLチェックをなくしたいと思っています。少なくとも私の場合は、パフォーマンスにあまり影響を与えないと思います。

MyEvent( param1, param2 );

今のところ、私は各イベントに空のインラインハンドラを手動で追加することでこれを解決しています。これは、私がそれを行うことなどを覚えておく必要があるため、エラーが発生しやすいのです。

void Initialize() {
  MyEvent += new MyEvent( (p1,p2) => { } );
}

リフレクションとCLRマジックを使って、与えられたクラスのすべてのイベントに対して空のハンドラを自動的に生成する方法はありますか?

どのように解決するのですか?

私は別の投稿でこれを見て、恥ずかしながらそれを盗み、それ以来私のコードの多くで使用しています。

public delegate void MyClickHandler(object sender, string myValue);
public event MyClickHandler Click = delegate {}; // add empty delegate!

//Let you do this:
public void DoSomething() {
    Click(this, "foo");
}

//Instead of this:
public void DoSomething() {
    if (Click != null) // Unnecessary!
        Click(this, "foo");
}

( 編集する。 私はこのポストからそれを得た C#の隠し機能? )