デリゲート
日本語では委譲という意味。
処理を渡すこと。
変数にメソッド代入するような仕組み(関数ポインタ)。(JSにおいては -> 参照) code:c#
public delegate void Del(string message); //†1
public static void TestMethod(string message)
{
System.Console.WriteLine(message);
}
void main()
{
Del handler = TestMethod; //†2
handler("Hello World"); //†3
}
†1: delegateというキーワードを使用することで、Delはデリゲート型として使える。 引数を代入したいメソッドの引数と型も含め同じにする。
†2: TestMethod というメソッドをhandler という変数に代入している。
†3: 関数の呼び出し。中身はTestMethodとなる。
いちいちdelegateを作って型を作るのはだるいので、Action, Funcというのが予め用意されている。
よくあるのは、その場でメソッドを作って(ラムダ式)書くことが多い。
例文
1. 代入するメソッドに引数がない場合。
code:c#
using System;
void TestMethod()
{
Action action = () => //†1 ,†2
{
Console.WriteLine("test");
};
action(); // †3
}
†1: Actionという型がすでに用意されているのでそこにメソッドを代入する。(参照) †2: () => {} ;
ラムダ式によるメソッドの定義
()はメソッドの引数に対応する(今回の場合は引数なし)
{}はメソッドの中身
†3: 結果は test
2. 引数がある場合(引数が一つでint)
code:c#
using System;
void TestMethod()
{
Action<int> f = (x) => //†1
{
Console.WriteLine(x);
};
f(7);//†2
}
†1: メソッドの引数の変数名がx。 (引数の数が1個の場合、上記の (x) の() が省略できる。だいたいの場合省略されている。)
†2: 結果は7