読者です 読者をやめる 読者になる 読者になる

event

delegate型変数をクラスのメンバフィールドに用意しておけば、コールバック関数を実装できる・・・。
ただ、publicでdelegate型変数を公開すると、直接的に中の関数を実行されてしまう・・・。
かといって、privateにすると、実行するハンドラ関数を登録できない・・・。

eventはdelegate型変数へのアクセスをハンドラ登録のみに限定できる・・・。

InputCheckClass.csを用意し、

引数がstringで戻り値がvoidなdelegate、EventDelegateを定義・・・。
(MainClassからも使うのでpublicにしてる・・・。)

コンストラクタに指定された文字列を格納しておくtarget・・・。
InputCheckClassは、このtargetと同じ文字列が入力されたら、イベントを起こすというクラス・・・。
eventの付いたEventDelegate型変数callback・・・。これがイベント用のデリゲート変数・・・。

引数のtargetをメンバに・・・。

InputCheckLoopで、Console.ReadLineで入力された文字列strがtargetと同じかをチェック・・・。
もし同じなら、strをcallbackに渡して実行、それとともにループを抜ける・・・。
つまり、一致するまで無限ループ・・・。

MainClass.csで、

callbackに登録するハンドラEventHandlerは、こんな感じ・・・。
"Hit!: ~"という感じで入力文字列を出力・・・。

Mainでは、

InputCheckClassオブジェクトchkを生成・・・。
対象文字列は"abc"・・・。
chk.callbackに+=演算子で、EventHandlerを登録・・・。
(chk.callbackに括弧と引数を付けて呼ぼうとするとコンパイルエラーになる・・・。)
chk.InputCheckLoopでチェックループに入る・・・。
一致する文字列が見つかって、ループを抜けたら"(End)"を出力・・・。

hoge
foo
bar
abc
Hit!: abc
(End)
続行するには何かキーを押してください . . .

hoge, foo, barは、abcと一致しないので、EventHandlerの処理は起きない・・・。
しかし、abcを入れると、"Hit!: abc"と出力して、このループは終了・・・。"(End)"が出力されて終わる・・・。

Sample/cs/event/event/src/event_ at master · bg1bgst333/Sample · GitHub