後は残り2本です。それぞれ-=
が 1 つのサブスクリプションのみを削除します。少なくとも、通常のデリゲートだけを使用してイベントをサポートしている場合はそうです。
これは、実際にイベントを含まなくても簡単に確認できます。
using System;
public class Program
{
public static void Main(string[] args)
{
Action action = () => Console.WriteLine("Foo");
// This is a stand-in for the event.
Action x = null;
x += action;
x += action;
x += action;
x -= action;
x(); // Prints Foo twice
}
}
厳密に言えば、イベント サブスクリプションは何でもできます。次のようなイベントを実装できます。
private EventHandler weirdEvent;
public event EventHandler WeirdEvent
{
add { weirdEvent += value; } // Subscribe as normal
remove { weirdEvent = null; } // I'm bored with *all* the handlers
}
しかし、通常、イベントは C# のシンタックス シュガーであるメソッドであるDelegate.Combine
andに委譲するだけです。Delegate.Remove
+=
-=
イベントとデリゲートに関する私の記事には、組み合わせと削除で何が起こるかについての詳細が含まれています。