イベントってなに?
フォームでいうところの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 件のコメント:
コメントを投稿