メソッドを渡せる仕組み「delegate(デリゲート)」とは?
C#の delegate(デリゲート) は、メソッドを変数のように扱うことができる機能です。
メソッドを引数として渡したり、後から呼び出したりできるようになります。
delegateのイメージ
まるで「メソッドの型」のように扱い、決まった形のメソッドだけを受け取れる仕組みです。
基本構文
delegate 戻り値の型 デリゲート名(引数の型);
例:引数1つ、戻り値なしのdelegate
public delegate void GreetDelegate(string name);
delegateの使い方
public class Greeter {
public static void SayHello(string name) {
Console.WriteLine("こんにちは、" + name + "さん!");
}
}
GreetDelegate greet = Greeter.SayHello;
greet("太郎"); // → こんにちは、太郎さん!
delegateを引数に使う
public static void Execute(GreetDelegate action) {
action("花子");
}
Execute(Greeter.SayHello); // → こんにちは、花子さん!
匿名メソッドやラムダ式との連携
// 匿名メソッド
GreetDelegate greet = delegate(string name) {
Console.WriteLine("Hi, " + name);
};
// ラムダ式
GreetDelegate greet2 = name => Console.WriteLine("Hello, " + name);
組み込みdelegate型
C#には、汎用的なdelegate型が用意されています(いずれもSystem
名前空間)。
Action
:戻り値なし
Func<T, TResult>
:戻り値あり
Predicate<T>
:true/falseを返す
Action say = name => Console.WriteLine("やあ " + name);
say("次郎");
Func add = (a, b) => a + b;
Console.WriteLine(add(3, 4)); // → 7
イベントとの関連
delegateは、イベント(event)機能の基盤としても使われます。
「ある出来事が起きたときに実行する処理」を登録・通知するのに便利です。
まとめ
delegate(デリゲート)は、メソッドを変数のように扱えるC#特有の仕組みです。
関数を引数として渡したり、実行タイミングを柔軟に制御したりでき、ラムダ式・イベント・非同期処理など多くの場面で活躍します。
最初はdelegate
+Action
やFunc
から慣れていくのがおすすめです!