// とても簡単なイベントの例
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値のみが帰っているようです。