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); は匿名メソッドの本体です。
デリゲートは、匿名メソッドまたは名前付きメソッドを介して、つまりメソッドパラメータをデリゲートオブジェクトに渡すことによって呼び出すことができます。
例:
nc(10);
例
次の例は、匿名メソッドの概念を示しています:
using System; delegate void NumberChanger(int n); namespace DelegateAppl { class TestDelegate { static int num = 10; public static void AddNum(int p) { num += p; Console.WriteLine("Named Method: {0}", num); } public static void MultNum(int q) { num *= q; Console.WriteLine("Named Method: {0}", num); } public static int getNum() { return num; } static void Main(string[] args) { // 使用匿名方法创建委托实例 NumberChanger nc = delegate(int x) { Console.WriteLine("Anonymous Method: {0}", x); }; // 使用匿名方法调用委托 nc(10); // 使用命名方法实例化委托 nc = new NumberChanger(AddNum); // 使用命名方法调用委托 nc(5); // 使用另一个命名方法实例化委托 nc = new NumberChanger(MultNum); // 使用命名方法调用委托 nc(2); Console.ReadKey(); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
Anonymous Method: 10 Named Method: 15 Named Method: 30