2012-11-21 1 views
1

나는 임의의 수의 Func<T, TResult> 대리인을 등록하는 방법을 제공해야하는 클래스가 있습니다.올바르게 저장/노출 클래스 목록에있는 <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()); 
    } 

} 

이 허용 구현 가정?

답변

1

정보가 충분하지 않습니다. 귀하의 상황, 특히 계약 보증 (예 : 보증 된 주문, 컬렉션의 불변성 등)에 따라 달라질 수 있습니다. 특별한 요구 사항이 없다면 가장 간단한 버전 인 IEnumerable<Func<T, TResult>>으로 가서 나머지는 구현에 맡겨 두는 것이 좋습니다. 그게 내가 과거에 한 짓이야.

예 에서처럼 List을 사용하는 경우 본질적으로 잘못된 것은 없습니다. 필요한 것 이상으로 자신을 제한하지 않도록 IEnumerable<Func<T, TResult>>을 사용하는 것이 편리 할 수 ​​있습니다. List<T>IEnumerable<T>을 구현하므로 초기화 할 때 여전히 Conditions = new List<Func<T, TResult>>을 사용할 수 있습니다.

관련 문제