为什么以及何时从Collection <T>继承

Ken*_*Lee 9 c# collections data-structures

我在用C#编写的项目中跟踪遗留代码.

我找到以下代码:

public class FooCollection : Collection<IFoo> {};
Run Code Online (Sandbox Code Playgroud)

我不明白为什么(以及何时)我们需要像这样创建我们自己的Collection类.

为什么不直接使用内置的集合(array,List<T>,Dictionary<K,V>,...)

什么是数据结构Collection<T>?阵列?或链表?

Tho*_*que 6

我不明白为什么(以及何时)我们需要像这样创建我们自己的Collection类.

你真的"不需要"; 你可以直接使用Collection<IFoo>,但拥有一个特定的类可以帮助提高可读性.此外,它还允许您为此集合类型添加特定行为.此外,Collection<T>该类允许通过覆盖虚方法重新定义大多数操作; 这允许您自定义标准集合方法的行为.

为什么不使用内置集合(数组,列表,字典,...)

数组具有固定长度,因此您无法添加或删除项目; 所以它并不是真正的等价物.Add将值与键相关联,因此它具有明显不同的目的.InsertItem只要您不需要自定义行为,就可以使用它; 此类不是为继承而设计的,因为它的方法是非虚拟的.

Collection中使用的数据结构是什么?阵列?或链表?

Add充当另一个人的包装AddRange.默认情况下,它使用a Dictionary<K,V>(基于数组),但是您可以将任何其他List<T>实现传递给构造函数,它将使用它.