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
C言語
- 精密加工:ワーク精度達成のための実証済み技術
- EPAメソッド21:包括的な漏洩検知・修復プロトコル
- C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
- C# 部分クラスと部分メソッドを理解する
- C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
- C#メソッドオーバーロード完全ガイド:概念、例、ベストプラクティス
- C#のメソッド:定義、呼び出し、パラメータ渡し、再帰を完全解説
- C# デリゲート完全ガイド:関数参照とイベントの仕組みを理解する
- Python ラムダ関数: 無名関数の実践ガイド
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Java 8デフォルトメソッド解説:インターフェース拡張と後方互換性