当一个类必须具有某种对象的容器(集合)时,有几种选择,我想知道我会更喜欢哪种实现。
这里遵循我发现的选项:
public class AClass : IEnumerable<string>{
private List<string> values = new List<string>()
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator(){
return values.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
优点: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
}
Run Code Online (Sandbox Code Playgroud)
优点:与IEnumerable相同,并且具有用于添加和删除元素的界面
缺点:ICollection接口定义了其他人很少使用的方法,仅出于接口的目的而实现这些方法就很无聊。IEnumerable LINQ扩展也可以解决其中一些问题。
public class AClass : List<string>{
}
Run Code Online (Sandbox Code Playgroud)
优点:无需执行任何方法。调用方可以调用List实现的任何方法
缺点:AClass依赖于集合列表,如果更改,则可能需要更改某些调用者代码。同样,AClass不能继承任何其他类。
问题是:我更愿意声明我的班级包含一个同时支持添加和删除操作的集合?或其他建议...