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