カテゴリー
C

独習C#第3版、P449 イベント

// とても簡単なイベントの例
 
using System;

// イベント用のデリゲートの宣言
delegate void MyEventHandler(int x); //←イベントで使うデリゲートを宣言する

// イベントの送信側のクラス
class MyEvent
{
    public event MyEventHandler SomeEvent; //←イベントを宣言する

    // イベント送信を実装したメソッド
    public void Fire(int x)
    {
        if (SomeEvent != null)
            SomeEvent(x); //←イベントを送信する
    }
}

class EventDemo
{
    static void Handler(int x)
    {
        Console.WriteLine("1から10迄の和");
        int wa = 0;
        for (int i = 1; i <= x; i++)
            wa += i;
        Console.WriteLine(wa);
    }
    static void Handler2(int x)
    {
        Console.WriteLine("1から10迄の2乗の和");
        int wa = 0;
        for (int i = 1; i <= x; i++)
            wa += i * i;
        Console.WriteLine(wa);
    }

    static void Main()
    {
        MyEvent evt = new MyEvent(); //←イベントを送信する側のインスタンスを作成する

        // ハンドラをイベントリストに追加する
        evt.SomeEvent += Handler; //←イベントのチェーンにハンドラを追加する
        evt.SomeEvent += Handler2;

        // イベントを人為的に発生させる
        evt.Fire(10); //←イベントを発生させる
    }
}

上の例は下を変更しました。

// とても簡単なイベントの例
 
using System;

// イベント用のデリゲートの宣言
delegate void MyEventHandler(); //←イベントで使うデリゲートを宣言する

// イベントの送信側のクラス
class MyEvent
{
    public event MyEventHandler SomeEvent; //←イベントを宣言する

    // イベント送信を実装したメソッド
    public void Fire()
    {
        if (SomeEvent != null)
            SomeEvent(); //←イベントを送信する
    }
}

class EventDemo
{
    static void Handler()
    {
        Console.WriteLine("1から10迄の和");
        int wa = 0;
        for (int i = 1; i <= 10; i++)
            wa += i;
        Console.WriteLine(wa);
    }
    static void Handler2()
    {
        Console.WriteLine("1から10迄の2乗の和");
        int wa = 0;
        for (int i = 1; i <= 10; i++)
            wa += i * i;
        Console.WriteLine(wa);
    }

    static void Main()
    {
        MyEvent evt = new MyEvent(); //←イベントを送信する側のインスタンスを作成する

        // ハンドラをイベントリストに追加する
        evt.SomeEvent += Handler; //←イベントのチェーンにハンドラを追加する
        evt.SomeEvent += Handler2;

        // イベントを人為的に発生させる
        evt.Fire(); //←イベントを発生させる
    }
}

こっちが最初です。

// とても簡単なイベントの例
 
using System;

// イベント用のデリゲートの宣言
delegate int MyEventHandler(int x); //←イベントで使うデリゲートを宣言する

// イベントの送信側のクラス
class MyEvent
{
    public event MyEventHandler SomeEvent; //←イベントを宣言する

    // イベント送信を実装したメソッド
    public void Fire(int x)
    {
        if (SomeEvent != null)
            Console.WriteLine(SomeEvent(x)); //←イベントを送信する
    }
}

class EventDemo
{
    static int Handler(int x)
    {
        Console.WriteLine("1から10迄の和");
        int wa = 0;
        for (int i = 1; i <= x; i++)
            wa += i;
        Console.WriteLine(wa);
        return wa;
    }
    static int Handler2(int x)
    {
        Console.WriteLine("1から10迄の2乗の和");
        int wa = 0;
        for (int i = 1; i <= x; i++)
            wa += i * i;
        Console.WriteLine(wa);
        return wa;
    }

    static void Main()
    {
        MyEvent evt = new MyEvent(); //←イベントを送信する側のインスタンスを作成する

        // ハンドラをイベントリストに追加する
        evt.SomeEvent += Handler; //←イベントのチェーンにハンドラを追加する
        evt.SomeEvent += Handler2;

        // イベントを人為的に発生させる
        evt.Fire(10); //←イベントを発生させる
    }
}

HandlerとHandler2をreturnする関数にしてみましたが、evt.Fire(10)ではHandler2のreturn値のみが帰っているようです。

コメントを残す

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

inserted by FC2 system