ヒント: 匿名関数で戻り値の型を指定する必要はありません。戻り値の型はメソッド本体の return ステートメントから推測されます。
匿名関数の構文
匿名関数は、次の例に示すように、delegate キーワードを使用して作成されたデリゲート インスタンスを通じて宣言されます。
delegate void NumberChanger(int n);
…
NumberChanger nc = delegate(int x)
{
Console.WriteLine(“Anonymous Method: {0}”, x);
};
コード ブロックConsole.WriteLine("Anonymous Method: {0}", x);
は、匿名関数の本体です。
デリゲートは、匿名関数または一般的な名前付き関数を通じて呼び出すことができ、対応するメソッド パラメーターをデリゲート オブジェクトに渡すだけで済みます。無名関数の本体の最後に;
を続ける必要があることに注意してください。
[例] 以下の例は、匿名関数の使用を示しています。
using System;
namespace it-kiso.com
{
class Demo
{
delegate void NumberChanger(int n);
static int num = 10;
public static void AddNum(int p){
num += p;
Console.WriteLine("Named Function: {0}", num);
}
public static void MultNum(int q){
num *= q;
Console.WriteLine("Named Function: {0}", num);
}
static void Main(string[] args){
// 匿名関数を使用してデリゲートインスタンスを作成する
NumberChanger nc = delegate(int x)
{
Console.WriteLine("Anonymous function:{0}", x);
};
// 匿名関数を使用してデリゲートを呼び出す
nc(10);
// 名前付き関数を使用してデリゲートインスタンスを作成する
nc = new NumberChanger(AddNum);
// 名前付き関数を使用してデリゲートを呼び出す
nc(5);
// 別の名前付き関数を使用してデリゲートインスタンスを作成する
nc = new NumberChanger(MultNum);
// 名前付き関数を使用してデリゲートを呼び出す
nc(2);
Console.ReadKey();
}
}
}
操作の結果は次のようになります。
Anonymous function:
10Named Function:
15Named Function:
30