Delegate
概要
色んなコードを読んで出てくる、DelegateとEventは自分みたいな初心者にとっての関門でした。
一度しっかり学んで定着させたいと思いました。
Delegate
- 関数のコンテナ
- 関数を格納できる
- デリゲートにメソッド(関数)を登録して、デリゲートを使うと登録したメソッドが全部一気に使えるイメージ
例
- 二つの整数を使った四則演算の結果をすべて見たい
- 例えば、1から100までの整数と3との四則演算の結果全部見たいときってありますよね(ない)
使い方
- 登録したいメソッドを用意する
// 今回は四則演算 // 演算して結果の表示をするメソッド4つ void Plus(int a, int b) { print(a + "+" + b +"=" + (a + b)); } void Minus(int a, int b) { print(a + "-" + b + "=" + (a - b)); } void Multiplication(int a, int b) { print(a + "×" + b + "=" + (a * b)); } void Division(int a, int b) { print(a + "÷" + b + "=" + (a / b)); }
- デリゲートの宣言
- デリゲートは登録したい関数と、返り値の型と引数を一致させなければならない
// delegateキーワード 戻り値 デリゲートの名前 (パラメーター) delegate void Operation(int a, int b); // 変数を宣言 Operation op;
- ダメな例
// 返り値の型が一致していない delegate int Operation(int a, int b); // 引数が一致していない delegate void Operation(float a, float b);
- デリゲートに格納
// Plusメソッドを代入 op = Plus; // デリゲートには何個もメソッドを入れられる // 追加登録するときは+=(一つ目から+=でもよい) op += Minus; op += Multiplication; op += Division; // 解除するときは-= // op -= Division;
- デリゲートを使う
for(int i=1; i <= 100; i++) { // デリゲート変数名(引数) op(i, 3); }
- 使うときの注意 もしデリゲートに何もメソッドが登録されていない場合、使うとエラーになってしまうので、使うときはnull判定をした方がよい
if(op != null){ op(i , 3); }
- 結果 1から100までの整数と3との足し算、引き算、掛け算、割り算の結果が表示されます(それだけ)
最後
今回は結果を表示するだけだったので、意味がないですが、同じメソッドを二回登録とかもできます。
Eventは次回に回します