はじめに
イベントってクリックとかしたときに呼ばれるやつだよね~
と思ってたのですが、どうやら「呼ばれるやつ」はイベントではなさそう…?
結論
イベントの役割は通知するだけ
…正直よくわからない。文章だけだとわからないけど、コードをゆっくり追えば大丈夫でした。
書き方
イベント
まずはイベントそのものを宣言。
デリゲートの型は ○○Handler という形が多そう。
// テンプレート
修飾子 event デリゲートの型 イベント名
// 例
public event EventHandler Click;
登録
調べると購読とも言うらしい?このあたりはまだ曖昧なので誤りあれば修正します。
// テンプレート
クラス.イベント名 += 関数(イベントハンドラ)
// 例
this.button.Click += calc_Sum;
流れ
- ボタンをクリックする
- Click「イベント起きたでー!calc_Sumー!!」
- calc_Sum「聞こえとるで。ほな計算するでー」
冒頭でも言った通り、イベント(Click)は通知するだけ。登録してる関数を呼ぶだけ。
なにも登録してなければ、イベントは何もしません。
通知自体は処理として見えないせいか、処理(calc_Sun)をイベントだと勘違いしてしまったのが混乱の始まり。
ついでによく見るInvokeについても
個人的に混乱したので。
とある動画教材で「InvokeはUIスレッドを呼ぶので~」と聞いたのがきっかけ。
イベント名?.Invoke();
え、でも画面(UI)関係ないイベントもあるよね??
加えて↓のコードも見て余計混乱。
Dispatcher.Invoke(() => {
画面操作
});
Invokeは日本語で…?
呼び出すという意味。そう聞くと途端に理解できました。
なのでイベント名?.Invoke();は「イベントを呼ぶ」
「UIスレッドを呼ぶ」のはDispatcher.Invoke()でした。
日本人には同音異義語にしか見えんかったんや……