要麼,如果你想公開爲ICollection<IType>
,從而使外部呼叫者添加ITypes
不在MyTypes
聲明this.items
爲List<IType>
。
這樣的內部工作,對列表中的項目
var myObj = this.items[i] as MyType;
if (myObj == null) {
work with this.items[i] and treat it as a IType
} else {
work with myObj which is a MyType
}
OR
聲明公共財產
public ICollection<MyType> Items { get return this.items; } }
,從而允許外部呼叫者添加MyType
類型的唯一項目。
我很抱歉,但你不能滿足條件(2)和(3)在同一時間
UPDATE
另一種選擇是隻允許外部呼叫者獲得的物品該列表但不添加項目,通過使用只有一個getter的索引器。
public IType this[int i]
{
get { return this.items[i]; }
}
外部呼叫者可再接入的項目,如本
var obj = new ClassImplementingThisStuff();
int i = 5;
IType x = obj[i];
另外添加計數屬性
public int Count {
get { return this items.Count; }
}
這種解決方案避免了不必要的枚舉。
要求(2)和(3)是矛盾的。你不知道調用者要添加到集合中的具體類型,那麼你怎樣才能把它們作爲一種特定的類型來對待呢? –
如果你期望項目是特定類型的,允許外部類添加項目是危險的 - 當你將它們全部視爲貓時,你不會希望有人爲你的動物集合添加一條狗:-) – Cameron
@PaulPhillips - 這是一個好點。我可能需要重新考慮這是如何設計的。 –