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