デリゲート
Delegateは委譲という意味で、委譲する内容は処理
定義方法は、処理を記述しない以外は、通常のメソッドと同様で、それにdelegateキーワードを指定する。
デリゲート型の変数には、戻り値と引数リストが一致するメソッドを代入できる(派生クラス(ダウンキャスト)は可能)
delegate 戻り値 デリゲート名(引数リスト);
マルチキャスト
複数のメソッドが代入されているデリゲートを呼び出すと、代入順に逐次実行される。
述語
代入するメソッドについて
つまり、代入するメソッドの使用回数によらず、どこかに必ず1回は定義しなければならない。
C#では、これを簡単にする仕組みが存在する。
匿名関数
delegate (引数リスト){処理}
ラムダ式
一般的な定義は以下の①であるが、引数が明確な場合には②のように省略することができる。
(int n) => n > 0; // ①
n => n > 0; // ② 0と比較しているため、引数がint型であることは明確
まとめ
配列内の、5以上の偶数を表示する
internal class Summary
{
private delegate bool DGCondition(int n);
internal static void DispGT5Even(int[] nums)
{
DGCondition prediction = n => n >= 5;
prediction += n => n % 2 == 0;
GetGT5Even(nums, prediction);
}
private static void GetGT5Even(int[] nums, DGCondition prediction)
{
foreach (var num in nums)
{
var condition = prediction(num);
condition &= prediction(num);
if (!condition) continue;
System.Console.WriteLine(num);
}
}
}