c# - 泛型类 - 类型参数




继承自List<T> (4)

实现从List<T>继承的新类的最快方法是什么?

class Animal {}

class Animals : List<Animal> {} // (1)

我遇到的一个问题:通过简单地执行(1) ,我发现我没有从List<T>继承任何构造函数的好处。

最后,我希望Animals的行为与List<T>非常相似(例如,可以构建,与Linq兼容)。 但此外,我还希望能够添加自己的自定义方法。


不建议从List<T>派生。 主要是因为List从未用于扩展,而是用于性能。

如果要创建自己的特定集合,则应继承Collection<T> 。 在你的情况下,它将是:

class Animals : Collection<Animal> {}

如果要创建公开的动物集合,则不应从List<T>继承,而是从Collection<T>继承并在类名中使用postfix Collection 。 示例: AnimalCollection : Collection<Animal>

这得到框架设计指南的支持,更具体地说:

请勿在公共API中使用ArrayListList<T>HashtableDictionary<K,V> 。 改为使用Collection<T>ReadOnlyCollection<T>KeyedCollection<K,T>或CollectionBase子类型。 请注意,通用集合仅在Framework 2.0及更高版本中受支持。


没有必要从List继承以使用集合初始化语法或使用Linq扩展方法。

只需实现IEnumerableAdd方法。


请记住,继承自List并不是您可能需要的全部功能,很多成员都不是虚拟的,因此覆盖基本实现的唯一方法是使用new语法(而不是override )来遮蔽它。

如果您需要开始在标准列表操作上公开自定义行为,我将在一个类型上实现所有列表接口,该类型仅使用实际存储的内部列表。

这在很大程度上取决于您的最终要求。







collections