カテゴリー
C

独習C#第3版、P454 イベントハンドラーに匿名メソッドを使う

// とても簡単なイベントの例
 
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乗の集計は前のまま使います。イベントハンドラーのチェーンから匿名メソッドを削除う出来るか疑問ですが?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

inserted by FC2 system