c# c#泛型类 - 继承自List<T>



list数组 c#泛型委托 (6)

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

class Animal {}

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

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

最后,我希望Animals的行为与List<T>非常相似(例如,可以构建,与Linq兼容)。 但此外,我还希望能够添加自己的自定义方法。


Answers

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

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

不建议从List<T>派生。 主要是因为List从未用于扩展,而是用于性能。

如果要创建自己的特定集合,则应继承Collection<T> 。 在你的情况下,它将是:

class Animals : Collection<Animal> {}

请记住,继承自List并不是您可能需要的全部功能,很多成员都不是虚拟的,因此覆盖基本实现的唯一方法是使用new语法(而不是override )来遮蔽它。

如果您需要开始在标准列表操作上公开自定义行为,我将在一个类型上实现所有列表接口,该类型仅使用实际存储的内部列表。

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


class Animals : List<Animal> {}

这是最好的方式,因为你可以在定义它之后立即使用它。

所以我的建议是你的问题标题: Inherit List<T> ;-)


没有必要从List继承以使用集合初始化语法或使用Linq扩展方法。

只需实现IEnumerableAdd方法。


append :在末尾追加对象。

x = [1, 2, 3]
x.append([4, 5])
print (x)

给你: [1, 2, 3, [4, 5]]

extend :通过附加iterable中的元素来扩展列表。

x = [1, 2, 3]
x.extend([4, 5])
print (x)

给你: [1, 2, 3, 4, 5]





c# list inheritance collections