【发布时间】:2014-02-10 08:00:48
【问题描述】:
当一个类必须具有某种对象的容器(集合)时,有多种选择,我想知道我更喜欢哪种实现方式。
这里遵循我找到的选项:
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 不依赖于集合的具体实现(在本例中为 List)。
缺点: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>{
}
优点:无需实现任何方法。调用者可以调用 List 实现的任何方法
缺点:AClass 依赖于集合 List,如果它发生变化,可能需要更改一些调用者代码。 AClass 也不能继承任何其他类。
问题是:我更喜欢哪一个声明我的类包含支持添加和删除操作的集合?或者其他建议...
【问题讨论】:
标签: c# collections