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>
😉
从List
inheritance来使用集合初始化语法或使用Linq扩展方法是没有必要的。
只要实现IEnumerable
和一个Add
方法。