为什么ArrayList实现了IList、ICollection和IEnumerable接口?

15

ArrayList 声明实现了 IList, ICollection, 和 IEnumeralbe 接口。

为什么不只实现 IList, 因为 IList 也继承自 ICollection,而 ICollection 又继承自 IEnumerable

这种声明的目的是什么?在 .NET BCL 中有很多类似的情况。

4个回答

13

没有实质性的区别。我认为额外声明是为了更清晰明了。

在反射器中检查时,那些在代码中实现 IList 接口的类与那些在代码中声明实现 IListICollectionIEnumerable 接口的类拥有相同的接口声明列表。


7

1

我不太确定 ArrayList 是否有单独实现接口的情况。请考虑以下代码:

public interface IBase
{
    int SomeInt { get; set; }
}

public interface ISub : IBase
{
    int SomeOther { get; set; }
}

public class MyClass : ISub
{
    public int SomeOther { get; set; }
    public int SomeInt { get; set; }
}

MyClass 类型直接实现了 ISub 接口。然而,如果你将代码编译为一个程序集,然后在另一个项目中添加该程序集作为引用,在“对象浏览器”中查看 MyClass 的基类型时,将会显示类似于以下内容:

Base Types
 |- ISub
 |    |- IBase
 |- IBase
 |- Object

-1
  1. IEnumerable - 用于支持 foreach 语句
  2. ICollection - 用于支持在数组列表中添加单个或多个项

提问者并不是在询问它们的作用 - 他们在问为什么它们被明确列出为已实现,当它们已经通过IList继承实现了。 - Rob Levine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接