为什么ArrayList实现IList,ICollection,IEnumerable?

Ji *_*lin 15 c# interface

ArrayList声明它实现的IList,ICollectionIEnumeralbe接口.

为什么不实现IList,因为IList也是源自ICollection,并ICollection源自IEnumerable.

这种宣言的目的是什么?在.NET BCL中有很多这样的情况.

Ken*_* K. 13

没有有效的区别.我相信额外的声明是为了清楚.

当反射检查,这在代码实现的类IList具有相同的接口声明列表,其中类代码申报实现所有的Ilist,ICollectionIEnumerable.


Hen*_*man 7

使用以下代码:

interface I1 { }
interface I2 : I1 { }

class Foo: I2 { }
Run Code Online (Sandbox Code Playgroud)

如果你通过反思看Foo,你会发现

class Foo: I2, I1 { }
Run Code Online (Sandbox Code Playgroud)

哪个也适用于编译并给出相同的结果.
所以区别是没有意义的,在记录Foo时你也可以用两个接口来编写它.

另请参阅SO问题:为什么C#中的集合类(如ArrayList)从多个接口继承,如果其中一个接口继承其余接口?