[英]C#: Subclass List<Something>?
我有一個類EqualCondition
它實現我自己的接口ICondition
,它只有一個方法: SatisfiedBy(Something)
。
public class EqualCondition : ICondition {
private Something m_Something;
public HelloCondition(Something something) {
m_Something = something;
}
// Magic!!!
public bool SatisfiedBy(Something something) {
return something == m_Something;
}
}
因此, ICondition
實現非常簡單。 現在,我正在嘗試創建一個同時實現它的CombinationCondition
。 這個想法是CombinationCondition
將包含ICondition
的列表,該列表將確定SatisfiedBy
是否成功。
我的第一個想法是使CombinationCondition
實現IList<Something>
但是我很快意識到我只是在復制List<Something>
。 那么,為什么不只是繼承它呢?
這個想法聽起來不錯,直到我再次考慮如果我只是將List<Something>
子類化了,如何實現SatisfiedBy
。 我需要去做:
return innerList.All(x => x.SatisfiedBy(something))
但是,如何訪問內部列表?
就您所顯示的用例而言,我個人將使此實現為IEnumerable<Condition>
。 然后,您可以通過調用(內部封裝的) List<Condition>
的方法來實現GetEnumerator。
ICollection<Condition>
可能更有意義(因此您可以在運行時添加條件),但是僅在需要此功能時。 對於這種情況,在這種情況下,實現IList<T>
似乎有點過頭了。
從您發布的內容來看,我只會讓CombinationCondition
包含(封裝)一個List<Something>
。 除非絕對必要,否則外界無需知道這是一個清單。
編輯1:
public class CombinationCondition : ICondition {
private List<ICondition> list;
public CombinationCondition(List<ICondition> list) {
this.list = list;
}
// if you need it
public void AddCondition( ICondition condition ){
list.Add( condition );
}
// Still Magic!!!
public bool SatisfiedBy(Something something) {
return list.Any( x => x.SatisfiedBy( something ) );
}
}
編輯2:
您可能還考慮將CombinationCondition
重命名為CompoundCondition
...更有意義,至少對我而言:)
我不確定我100%理解您要做什么,但是這可以解決您的需求嗎?
public interface ICondition<T>
{
bool SatisfiedBy(T something);
}
這樣,您可以將其實現為所需的任何通用類型
一種可能是類型為IList <ICondition>的屬性,可能稱為“ Conditions”。
您不需要訪問內部列表-您可以訪問“自身”類。
但是,更喜歡從ICollection <T>進行子分類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.