カテゴリー
C

独習C#第3版、P452 マルチキャストイベント

// とても簡単なイベントの例
 
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); //←イベントを発生させる
    }
}

HandlerとHandler2がMainと同じクラスclass EventDemoで、staticで構成されている。

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

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

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

    // イベント送信を実装したメソッド
    public void Fire(int x)
    {
        if (SomeEvent != null)
            SomeEvent(x); //←イベントを送信する
    }
}
class H1
{
    public void Handler(int x)
    {
        Console.WriteLine("1から" + x + "迄の和");
        int wa = 0;
        for (int i = 1; i <= x; i++)
            wa += i;
        Console.WriteLine(wa);
    }
}
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);
    }
}

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

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

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

HandlerとHandler2を別のクラスに分けて、インスタンスにHandlerを含ませてみました。

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

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

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

    // イベント送信を実装したメソッド
    public void Fire(int x)
    {
        if (SomeEvent != null)
            SomeEvent(x); //←イベントを送信する
    }
}
class H1
{
    public void Handler(int x)
    {
        Console.WriteLine("1から" + x + "迄の和");
        int wa = 0;
        for (int i = 1; i <= x; i++)
            wa += i;
        Console.WriteLine(wa + "\n");
    }
}
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()
    {
        H1 objH1 = new H1();
        H2 objH2 = new H2();
        MyEvent evt = new MyEvent(); //←イベントを送信する側のインスタンスを作成する

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

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

        evt.SomeEvent -= objH1.Handler;
        evt.Fire(10);
    }
}

イベントチェーンから、objH1.Handlerを削除して、イベントを発生させてみました。

コメントを残す

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

inserted by FC2 system