如何最快地实现一个继承自List<T>
的新类?
class Animal {}
class Animals : List<Animal> {} // (1)
我遇到的一个问题是:仅仅通过执行(1),我发现我没有从List<T>
继承任何构造函数的好处。
最终,我希望Animals
的行为非常类似于List<T>
(例如可以构造,与Linq兼容)。但除此之外,我还想能够添加自己的自定义方法。
如何最快地实现一个继承自List<T>
的新类?
class Animal {}
class Animals : List<Animal> {} // (1)
我遇到的一个问题是:仅仅通过执行(1),我发现我没有从List<T>
继承任何构造函数的好处。
最终,我希望Animals
的行为非常类似于List<T>
(例如可以构造,与Linq兼容)。但除此之外,我还想能够添加自己的自定义方法。
List<T>
,而应该继承自Collection<T>
,并在类名后使用后缀Collection
。例如:AnimalCollection : Collection<Animal>
。ArrayList
、List<T>
、Hashtable
或Dictionary<K,V>
。改为使用Collection<T>
、ReadOnlyCollection<T>
、KeyedCollection<K,T>
或CollectionBase子类型。请注意,泛型集合仅受Framework版本2.0及以上支持。Collection<T>
则可以。顺便说一句,我更喜欢使用内部的List<T>
来实现IList<T>
或ICollection<T>
,而不是继承自Collection<T>
。 - digEmAllCollection<T>
实现了 IEnumerable
和 IEnumerable<T>
。使用 List<T>
能得到什么,而使用 Collection<T>
得不到什么? - João Angelo构造函数不会随着类一起继承。您需要重新实现所需的构造函数。
public class AnimalsCollection : List<Animal>
{
public AnimalsCollection(IEnumerable<Animal> animals) : base(animals) {}
}
继承自 List<T>
不被建议。主要是因为 List 从来没有被设计用于扩展,而是为了获得更好的性能。
如果你想创建自己特定的集合,你应该继承自 Collection<T>
。在你的情况下,应该这样写:
class Animals : Collection<Animal> {}
Collection<MyClass>
继承。但是在某些地方遇到了问题,例如Collection<T>
不支持Sort
、Find
、FindAll
等许多非常有用的方法。我必须将其更改为从List<MyClass>
继承。有什么我可以做的吗..? - shashwatnew
语法(而不是override
)来屏蔽它。Collection<MyClass>
继承。但是在某些地方遇到了问题,例如Collection<T>
不支持Sort
、Find
、FindAll
等许多非常有用的方法。我必须将其更改为从List<MyClass>
继承。有什么我可以做的吗..? - shashwatIEnumerable<T>
进行实现,因此这不是一个问题。 - Earth Engineclass Animals : List<Animal> {}
看起来这是最好的方法,因为您可以在定义后立即使用它。
所以我建议您的问题标题:Inherit List<T>
;-)
Collection<T>
)。请注意,这些方法并没有改变原文的意思。 - Konrad RudolphList<T>
是你不应该做的事情之一。这个问题在Stack Overflow上已经被讨论了数百次。 - George Stocker使用集合初始化语法或使用Linq扩展方法不需要继承List
。
只需实现IEnumerable
接口并且添加Add
方法即可。