イベント ThrowEvent、メソッド X() への参照があり、そのようにサブスクライブする場合:
ThrowEvent += X;
ThrowEvent += X;
ThrowEvent += X;
作ろうとしたらどうなった
ThrowEvent -= X;
最初または最後に追加されたメソッドを削除しますか?
自分で簡単にテストできます:
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 」であるため、最後のデリゲートが削除されたと結論付けることができます
イベント サブスクリプションのコンテキストでは、次の場合、2 つのデリゲートは同じです。
1. それらは同じ静的メソッドを指しています。 また: 2. 同じクラス インスタンスの同じインスタンス メソッドを指している。
したがって、あなたの質問では、X はこの条件を満たす必要があります。X
これらのどれが削除されても問題ありません。ポイントは、X
3回サブスクライブした後、イベントが発生したときにこのメソッドが3回呼び出されることです。一度アンサブスクライブされた後X
、イベントが発生したときに 2 回呼び出されます。