デリゲート (プログラミング)
C#の例を示す。まず以下では、「string型の引数を1つと、int型の戻り値を持つデリゲート」を宣言している。
コンパイラによって、System.Delegateから派生するSomeDelegate型が生成される。
次に、以下のようなメソッドを持つクラスがあったとする。
そして、以下のように(デリゲートと同じ引数と戻り値を持つ)既存の名前付きメソッドを参照するデリゲート型オブジェクトを生成することができる。
C/C++の関数ポインタと異なり、静的メソッドだけでなくインスタンスメソッドをデリゲートに代入することもできる(メソッドとインスタンスのペアがカプセル化される)。
C# 2.0以降では、匿名メソッド (anonymous method) としてインラインで記述したメソッドを参照するデリゲートを同時に定義することもできる。この書き方では、return文によって返される値がSomeDelegateデリゲートの戻り値に暗黙的に変換できない場合、エラーとなる。
なおC# 3.0以降では、匿名メソッドの代わりにラムダ式を使って下記のように記述することもできる。
匿名メソッドとラムダ式は併せて匿名関数 (anonymous function) と呼ばれる。匿名関数は外側の変数にアクセスすることができ、これをキャプチャと呼ぶ。匿名関数とデリゲートを用いてクロージャを実現することができる。
デリゲート (英: delegate) とは、主にC#、Visual Basic .NETなどの、.NET Frameworkのプログラミング言語に用意されている機能であり、参照型の一種(デリゲート型)である。