ArrayList为什么要实现IList、ICollection、IEnumerable?ArrayList声明它实现了IList、ICollection和IEnumeralbe接口。为什么不实现IList呢,因为IList也是从ICollection派生出来的,ICollection是从IEnumerable派生出来的。这样声明的目的是什么?.NETBCL中有很多这样的情况。使用以下代码:interfaceI1{}interfaceI2:I1{}classFoo:I2{}如果您通过反射查看Foo,您会发现classFoo:I2,I1{}也适用于编译并提供同样的结果。所以区别是没有意义的,在记录Foo时你也可以用两个接口来写它。另请参阅SO问题:如果其中一个接口继承其余接口,为什么C#中的集合类(如ArrayList)从多个接口继承?没有有效的区别。我认为额外的声明是为了清楚起见。在Reflector中检查时,实现IList的代码与声明所有IList、ICollection和IEnumerable类实现的代码具有相同的接口声明列表。我不太确定ArrayList是否有单独的接口实现。考虑以下代码:publicinterfaceIBase{intSomeInt{get;放;}}publicinterfaceISub:IBase{intSomeOther{get;放;}}publicclassMyClass:ISub{publicintSomeOther{get;放;}publicintSomeInt{得到;放;}}MyClass类型直接实现了ISub接口。但是,如果您将代码编译成一个程序集,然后将该程序集添加为对另一个项目的引用,打开对象浏览器并检查MyClass的基类型,它会出现如下内容:ImplementIList,ICollection,IEnumerable?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注—BaseTypes|-ISub||-IBase|-IBase|-ObjectIEnumerable–支持foreach语句ICollection–支持在arraylist中添加单个或多个项目本文收集自网络,不代表立场。如有侵权,请点击右侧联系管理员删除。如需转载请注明出处:
