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は次回に回します