未分類

C# デリゲートを扱う (2)

準備

(なし)

デザイン

1. フォーム (Form1) にボタン (button1) を配置します。
2. フォーム (Form1) にリストボックス (listBox1) を配置します。

サンプルコード (C#)

// 名前空間の追加
// (なし)

// デリゲートの宣言
delegate int TestDelegate(int v1, int v2);

// コード
private void button1_Click(object sender, EventArgs e)
{
  TestDelegate td = new TestDelegate(CalcAdd);
  listBox1.Items.Add(td(2, 3));
}

private int CalcAdd(int v1, int v2)
{
  return v1 + v2;
}

解説

まずは delegate int TestDelegate(int v1, int v2); で、デリゲート型を定義しています。この型は int 型の引数を 2 つとり、int 型の値を返すことを定義しています。この条件にあてはまるメソッドが CalcAdd です。

実際にデリゲートを使うときには、TestDelegate td = new TestDelegate(CalcAdd); で、デリゲート型の変数を作成しています。これで変数 td がメソッド CalcAdd と結びつきます。

使用するには、デリゲート型変数に値を渡すだけです。これでメソッドを実行した結果が返されます。

通常は引数を渡したり、戻り値を受け取るにはメソッドを使いますが、表面上はデリゲート型変数に対して引数を渡して、戻り値を受け取っています。しかし、デリゲート型変数にはメソッドが代入されていますので、実際にはメソッドが呼び出されています。

このように直接メソッドを呼び出さずに、代理の変数を仲介して処理することをデリゲートと呼ぶようです。

結果

動作確認環境

Visual Studio 2015 Professional (C# 6.0)

-未分類