// マルチキャストイベントの例
using System;
// イベントのためのデリゲート宣言
delegate void MyEventHandler();
// イベントの送信側のクラス
class MyEvent {
public event MyEventHandler SomeEvent;
// イベント送信を実装したメソッド
public void Fire() {
if(SomeEvent != null)
SomeEvent();
}
}
class X {
public void Xhandler() {
Console.WriteLine("Event received by X object");
}
}
class Y {
public void Yhandler() {
Console.WriteLine("Event received by Y object");
}
}
class EventDemo {
static void Handler() {
Console.WriteLine("Event received by EventDemo");
}
static void Main() {
MyEvent evt = new MyEvent();
X xOb = new X();
Y yOb = new Y();
// ハンドラをイベントリストに追加する
evt.SomeEvent += Handler;
evt.SomeEvent += xOb.Xhandler; //←マルチキャストのチェーンを作成する
evt.SomeEvent += yOb.Yhandler;
// イベントを発生させる
evt.Fire();
Console.WriteLine();
// ハンドラを削除する
evt.SomeEvent -= xOb.Xhandler;
Console.WriteLine("After removing xOb.Xhandler");
evt.Fire();
}
}
イベントは、マルチキャストにすることが出来ます。したがって、1つのイベント通知に対して複数のオブジェクトが応答することが出来る。この例には、クラスX,Yが追加されてますが、これらのクラス内で定義されるイベントハンドラーも、MyEventHandlerのデリゲート宣言文と同じ仮引数リストと戻り値を持っています。そのため、これらのハンドラーもイベントチェインに追加できます。と、解説されてます。