如果您经常在程序中使用您喜欢的集合路径:
到处输入List<T>
。
定义类:
class TT:List<T>
{
}
定义类:
class TT
{
private List<T> _tt;
// ...
}
我认为这不是很重要,但在上一个项目之后我开始经常考虑它。
答案 0 :(得分:5)
如果要添加其他功能,您应该只创建自己的集合类。
当您创建自己的集合类时,您应该继承System.Collections.ObjectModel.Collection<T>
class,而不是List<T>
。
继承此类允许您覆盖InsertItem
和RemoveItem
并在修改集合时运行自定义逻辑。 (继承List<T>
)
答案 1 :(得分:2)
您可以根据需要使用您指定的任何选项:
(1)如果你需要使用列表和集合的类型将不会改变。
(2)如果你想用附加功能扩展你的集合,那么你应该使用继承。
(3)如果你需要创建额外的抽象级别。在这种情况下,您的收藏只是实施细节,例如您将来可以在集上更改列表。
答案 2 :(得分:0)
如果我只需要一个列表,我使用 1 。如果我想添加其他方法和限制,我将定义 2 。
答案 3 :(得分:0)
不要继承List<>
- 这几乎总是不正确抽象的症状。让列表成为列表,仅此而已。我不知道您为什么要使用第3个选项。
答案 4 :(得分:0)
所有这些成本必须达到目的。如果要拦截列表中的插入和删除,或者如果要创建自己的方法来过滤列表等,则可以执行此操作。也许你需要一个不可变的列表。确保你有足够的理由来解决创建包装类的问题。
最后,正如SLaks所说,继承Collection<T>
比包裹列表更好。我不知道真正的差异,但我会选择这种方式。