Effective C# 3rd 読書メモ 07 コールバックはデリゲートによって実装する

メソッドの挙動を呼び出し側でカスタマイズしたい場合には、デリゲートを使用してコールバックを実装する。

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();
}

コメントを残す

コメントを残す