你会定义一个集合类型,如果愿意,如何定义?

时间:2010-10-28 15:33:40

标签: c# .net

如果您经常在程序中使用您喜欢的集合路径:

  1. 到处输入List<T>

  2. 定义类:

    class TT:List<T>
    {
    }
    
  3. 定义类:

    class TT
    {
       private List<T> _tt;
       // ...
    }
    
  4. 我认为这不是很重要,但在上一个项目之后我开始经常考虑它。

5 个答案:

答案 0 :(得分:5)

如果要添加其他功能,您应该只创建自己的集合类。

当您创建自己的集合类时,您应该继承System.Collections.ObjectModel.Collection<T> class,而不是List<T>
继承此类允许您覆盖InsertItemRemoveItem并在修改集合时运行自定义逻辑。 (继承List<T>

时无法做到这一点

答案 1 :(得分:2)

您可以根据需要使用您指定的任何选项:

(1)如果你需要使用列表和集合的类型将不会改变。

(2)如果你想用附加功能扩展你的集合,那么你应该使用继承。

(3)如果你需要创建额外的抽象级别。在这种情况下,您的收藏只是实施细节,例如您将来可以在上更改列表

答案 2 :(得分:0)

如果我只需要一个列表,我使用 1 。如果我想添加其他方法和限制,我将定义 2

答案 3 :(得分:0)

不要继承List<> - 这几乎总是不正确抽象的症状。让列表成为列表,仅此而已。我不知道您为什么要使用第3个选项。

答案 4 :(得分:0)

像所有事情一样,有权衡。使用包装类(封装)列表的好处是军事化访问它。这意味着很多工作:

  • 您必须添加要在列表中添加和删除的特定方法
  • 您将不得不添加迭代器方法,并可能在迭代时最终修改语法。

所有这些成本必须达到目的。如果要拦截列表中的插入和删除,或者如果要创建自己的方法来过滤列表等,则可以执行此操作。也许你需要一个不可变的列表。确保你有足够的理由来解决创建包装类的问题。

最后,正如SLaks所说,继承Collection<T>比包裹列表更好。我不知道真正的差异,但我会选择这种方式。