1

Func<T, TResult>任意の数のデリゲートを登録する方法を提供する必要があるクラスがあります。

これらは、後で一連の操作中にクラスで呼び出されます。

これらの代理人を登録する機能を公開する正しい方法は何ですか?IEnumerable<Func<T, TResult>>それは、、、IList<Func<T, TResult>>の単なる公共財産ReadOnlyCollection<Func<T, TResult>>ですか?

ここで一般的に使用される特定のパターンはありますか?

具体的には..

シナリオを想定する

public class Foo 
{
    public List<Func<Control, Func<bool>>> Conditions { get; set; }
    public void DoWork() 
    {
         foreach (Func<Control, Func<bool>> condition in this.Conditions)
             var result = condition.Invoke(new Control());
    }

}

これは許容できる実装ですか?

4

1 に答える 1

1

十分な情報がありません。それはあなたの状況、特にあなたが提供したい契約上の保証(例えば、保証された順序、コレクションの不変性など)に完全に依存します。特別な要件がない限り、最も単純なバージョンを使用することをお勧めします---IEnumerable<Func<T, TResult>>残りは実装に任せます。それは私が過去にしたことです。

あなたの例のようにを使用することに関しては、Listそれは本質的に何も悪いことではありません。IEnumerable<Func<T, TResult>>必要以上に自分を制限しないように、固執するのが便利な場合があります。List<T>を実装しているので、初期化するときにIEnumerable<T>引き続き使用できます。Conditions = new List<Func<T, TResult>>

于 2012-11-21T04:11:48.873 に答える