C# では、匿名関数は、名前がなく関数本体のみを持つ関数として単純に理解できます。匿名関数は、コードのブロックをデリゲート パラメーターとして渡すための手法を提供します。これは、デリゲート型が予期される場所で使用できる「インライン」ステートメントまたは式です。匿名関数を使用すると、名前付きデリゲートを初期化したり、名前付きデリゲートをメソッド パラメーターとして渡したりできます。
ヒント: 匿名関数で戻り値の型を指定する必要はありません。戻り値の型はメソッド本体の 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
「 C# 匿名関数/匿名メソッド」についてわかりやすく解説!絶対に観るべきベスト2動画
【C#】delegateとラムダ式をゆっくり解説
【プログラミング講座(C#)】第7回 関数・メソッドについて【独り言】