// とても簡単なイベントの例
using System;
// イベント用のデリゲートの宣言
delegate void MyEventHandler(int x); //←イベントで使うデリゲートを宣言する
// イベントの送信側のクラス
class MyEvent
{
public event MyEventHandler SomeEvent; //←イベントを宣言する
// イベント送信を実装したメソッド
public void Fire(int x)
{
if (SomeEvent != null)
SomeEvent(x); //←イベントを送信する
}
}
class H2
{
public void Handler2(int x)
{
Console.WriteLine("1から" + x + "迄の2乗の和");
int wa = 0;
for (int i = 1; i <= x; i++)
wa += i * i;
Console.WriteLine(wa + "\n");
}
}
class EventDemo
{
static void Main()
{
H2 objH2 = new H2();
MyEvent evt = new MyEvent(); //←イベントを送信する側のインスタンスを作成する
evt.SomeEvent += delegate(int x)
{
Console.WriteLine("1から" + x + "迄の和");
int wa = 0;
for (int i = 1; i <= x; i++)
wa += i;
Console.WriteLine(wa + "\n");
};
evt.SomeEvent += objH2.Handler2;
// イベントを人為的に発生させる
evt.Fire(20); //←イベントを発生させる
evt.SomeEvent -= objH2.Handler2;
evt.Fire(10);
}
}
1からxまで集計する関数を匿名メソッドにしてみました。引数の例はなかったのですが、delegate(int x)でOKでした。2乗の集計は前のまま使います。イベントハンドラーのチェーンから匿名メソッドを削除う出来るか疑問ですが?