1

イベント ThrowEvent、メソッド X() への参照があり、そのようにサブスクライブする場合:

ThrowEvent += X;
ThrowEvent += X;
ThrowEvent += X;

作ろうとしたらどうなった

ThrowEvent -= X;

最初または最後に追加されたメソッドを削除しますか?

4

2 に答える 2

0

自分で簡単にテストできます:

private static void A(Object sender, EventArgs e) {
  Console.Out.Write('A');
}

private static void B(Object sender, EventArgs e) {
  Console.Out.Write('B');
}

...

EventHandler eh = null;

eh += A;
eh += A;
eh += B;
eh += A;
eh -= A;

eh(null, EventArgs.Empty);

出力は「AAB 」であるため、最後のデリゲートが削除されたと結論付けることができます

于 2013-08-05T11:15:24.640 に答える
0

イベント サブスクリプションのコンテキストでは、次の場合、2 つのデリゲートは同じです。

1. それらは同じ静的メソッドを指しています。
また:
2. 同じクラス インスタンスの同じインスタンス メソッドを指している。

したがって、あなたの質問では、X はこの条件を満たす必要があります。Xこれらのどれが削除されても問題ありません。ポイントは、X3回サブスクライブした後、イベントが発生したときにこのメソッドが3回呼び出されることです。一度アンサブスクライブされた後X、イベントが発生したときに 2 回呼び出されます。

于 2013-08-05T11:17:02.470 に答える