Inheriting from List<T>
What is the fastest way to implement a new class that inherits from List<T>
?
class Animal {}
class Animals : List<Animal> {} // (1)
One problem I've encountered: By simply doing (1) , I've found that I'm not getting the benefit of inheriting any constructors from List<T>
.
In the end, I'd like Animals
to behave a lot like a List<T>
(eg, can be constructed, compatibility with Linq). But in addition, I'd also like to be able to add my own custom methods.
If you want to create a publicly exposed animal collection you should not inherit from List<T>
and instead inherit from Collection<T>
and use the postfix Collection
in the class name. Example: AnimalCollection : Collection<Animal>
.
This is supported by the framework design guidelines, more specifically:
DO NOT use ArrayList
, List<T>
, Hashtable
, or Dictionary<K,V>
in public APIs. Use Collection<T>
, ReadOnlyCollection<T>
, KeyedCollection<K,T>
, or CollectionBase subtypes instead. Note that the generic collections are only supported in the Framework version 2.0 and above.
Constructors are not inherited along with the class. You have to reimplement your desired constructors.
public class AnimalsCollection : List<Animal>
{
public AnimalsCollection(IEnumerable<Animal> animals) : base(animals) {}
}
Deriving from List<T>
is not advised. Primarily because List was never meant for extension, but for performance.
If you want to create your own specific collection, you should inherit from Collection<T>
. In your case it would be:
class Animals : Collection<Animal> {}
链接地址: http://www.djcxy.com/p/9126.html
上一篇: AddRange添加到集合
下一篇: 继承自List <T>