inheritance自List <T>

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

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

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

最后,我想Animals行为很像一个List<T> (例如,可以构build,与Linq兼容)。 但是,另外,我也希望能够添加我自己的自定义方法。

如果你想创build一个公开暴露的动物集合,你不应该从List<T>inheritance,而是从Collection<T>inheritance,并在类名中使用postfix Collection 。 例如: AnimalCollection : Collection<Animal>

这由框架devise准则支持,更具体地说:

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

构造函数不会与类一起inheritance。 你必须重新实现你想要的构造函数。

 public class AnimalsCollection : List<Animal> { public AnimalsCollection(IEnumerable<Animal> animals) : base(animals) {} } 

不build议从List<T>派生。 主要是因为List从来不是为了扩展,而是为了性能。

如果你想创build自己的特定集合,你应该从Collection<T>inheritance。 在你的情况下,这将是:

 class Animals : Collection<Animal> {} 

记住从Listinheritance的function并不像你可能需要的那样多,所以很多成员不是虚拟的,所以覆盖基本实现的唯一方法就是用new语法(而不是override )来override

如果你需要开始公开标准列表操作的自定义行为,我会实现所有的列表接口的types,只是使用一个内部列表的实际存储。

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

 class Animals : List<Animal> {} 

看起来是最好的方式,因为你可以在像这样定义之后使用它。

所以我的build议是你的问题标题: Inherit List<T> 😉

Listinheritance来使用集合初始化语法或使用Linq扩展方法是没有必要的。

只要实现IEnumerable和一个Add方法。