0

要件は、オブジェクトが引数として実行されるのイベントをAサブスクライブすることです。私はこれを与えられた方法で行いました:Bint

public delegate void BackToBase(int i);
public event BackToBase BackToBaseEvent;

...
if (this.BackToBaseEvent != null)
    this.BackToBaseEvent(5);

しかし、それを行うにはもっと短い方法があるように私には思えます。ある?

4

2 に答える 2

2

次のようなジェネリックデリゲートを使用すると、これをわずかに短縮できますEventHandler<T>

public event EventHandler<int> BackToBaseEvent;

ただし、nullチェックは非常に重要です。

于 2012-09-25T17:16:06.383 に答える
2

イベントハンドラーをctorの空のデリゲートに初期化できます。そうすれば、デリゲートがnullになることはないため、チェックする必要はありません。例えば

this.BackToBaseEvent += (s, e) => {};

そして、あなたはただそうします。

this.BackToBaseEvent(this, new MyEventArgs(5));

適切なデリゲートとイベント引数クラスを使用して、イベント処理パターンを必ず確認してください。

nullをチェックする場合(空のアクションを呼び出すオーバーヘッドを回避するため)、スレッドの問題を回避するためにhttp://msdn.microsoft.com/en-us/library/edzehd2t.aspxで説明されているローカル変数を使用します。

于 2012-09-25T17:22:32.700 に答える