イベントってなに?
フォームでいうところのOnButtonClick()を自前でやる方法のこと。そもそもイベントってなに?ということをたとえ話で説明すると、課長に相談したいんだけど電話中で、電話が終わったら課長から「電話おわったよ」と連絡がくるような仕組みのこと。
どうやって使う?
上に書いた例を参考にソースを書いてみた。課長 kousakuと 平社員だめおがいて、課長の電話が終わったタイミングでだめおが相談に行くというソースを書いてみた課長と平社員側でそれぞれこのような実装を行う。結構大変。
[課長側]
①イベントハンドラ追加
②イベント実行用の関数を定義 (On~関数を定義)
※On~という関数でラップしているけど、文法的にはなくてもよいが、普通は作るとのこと。
③イベントを発生させる。(On~関数を呼ぶ)
⑥だめおにイベントを受け取らせるための準備
[平社員側]
④受け取るイベントと受け取ったときに呼ばれる関数をひもづける
※-=にするとイベントを受け取らないようになる。
⑤イベント発生時に実施する処理を定義
class Program
{
static void Main(string[] args)
{
Kacho kousaku = new Kacho();
kousaku.Work();
Console.ReadLine();
}
}
class Kacho
{
// 部下を加える
Hira dameo = new Hira();
//(1)イベントハンドラ追加 (発行する人が定義する)
public event EventHandler DenwaEnd; // 電話が終わった
//(2)イベント実行用の関数を定義 (発行する人が定義する)
private void OnDenwaEnd(EventArgs e)
{
if (DenwaEnd != null)
{
DenwaEnd(this, e);
}
}
public Kacho()
{
//(6)だめおにイベントを受け取らせるための準備
dameo.Subscribe(this);
}
public void Work()
{
//課長仕事開始
for (int i = 0; i < 10; i++)
{
Console.WriteLine("課長電話中。");
System.Threading.Thread.Sleep(1000);
}
//(3)イベントを発生させる。
OnDenwaEnd(EventArgs.Empty);
}
}
class Hira
{
// (4)イベントを受け取る設定をする。
// 受け取るイベントと受け取ったときに呼ばれる関数をひもづける
public void Subscribe(Kacho kacho)
{
kacho.DenwaEnd += KachoDenwaEnd;
}
// (5)イベント発生時に実施する処理を定義
public void KachoDenwaEnd(object sender, EventArgs e)
{
Console.WriteLine("課長。例の件なのですが、AAAなので、BBBにします。よろしいでしょうか?");
}
}
出力結果
課長電話中。課長電話中。
課長電話中。
課長電話中。
課長電話中。
課長電話中。
課長電話中。
課長電話中。
課長電話中。
課長電話中。
課長。例の件なのですが、AAAなので、BBBにします。よろしいでしょうか?
0 件のコメント:
コメントを投稿