當一個類必須有某種對象的容器(集合)時,有幾種選擇,我想知道我更喜歡什麼實現。在課堂上有一個集合
下面就跟隨我找到的選項:
public class AClass : IEnumerable<string>{
private List<string> values = new List<string>()
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator(){
return values.GetEnumerator();
}
}
優點:ACLASS不依賴於具體實現的集合(在這種情況下列表)。
缺點:ACLASS沒有接口,用於添加和刪除元素
public class AClass : ICollection<string>{
private List<string> values = new List<string>()
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator(){
return values.GetEnumerator();
}
//other ICollectionMembers
}
優點:同爲IEnumerable加上它具有界面添加和刪除元素
缺點: ICollection接口定義了其他很少使用的方法,並且爲了實現接口而實現這些方法會很枯燥。此外,IEnumerable LINQ擴展會照顧其中的一些。
public class AClass : List<string>{
}
優點:無需實施任何方法。主叫方可以調用任何由列表執行的方法
缺點:AClass依賴於集合列表,如果它改變了一些調用者代碼可能需要改變。另外AClass不能繼承任何其他類。
現在的問題是:我更喜歡哪一個表明我的類包含一個支持Add和Remove操作的集合?或其他建議...
由於您已擁有Property來獲取列表,因此不需要添加和刪除方法。我喜歡ideia,但我會讓它返回ICollection,所以它不會和我的第三個選項一樣。 –
你說得對,你可以把它改成ICollection,或者IEnumerable更好。如果你返回IEnumerable,用戶不能直接向列表添加項目。 –