メソッドの挙動を呼び出し側でカスタマイズしたい場合には、デリゲートを使用してコールバックを実装する。
LINQでデリゲートを使う例:
var numbers = Enumerable.Range(1, 200).ToList();
numbers.RemoveAll(n => n % 2 == 0); // Predicate
numbers.ForEach(Console.WriteLine); // Action
マルチキャストデリゲートについては、戻り値は最後に呼び出されたデリゲートの返した値になる点に注意が必要。
以下のようにすることでマルチキャストデリゲートの各デリゲートの戻り値を確認できる。
public void DoSomething(Func<bool> pred)
{
var result = true;
foreach (Func<bool> pr in pred.GetInvocationList())
result = &= pr();
}