// とても簡単なイベントの例
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を削除して、イベントを発生させてみました。