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中使用
ArrayList,List<T>,Hashtable或Dictionary<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方法。