4

我不明白为什么IList实施IEnumerable考虑到IList实施ICollection也实施IEnumerable

4

3 回答 3

11

我假设您想知道为什么它声明它实现ICollection以及IEnumerable,当第一个暗示第二个时。我怀疑主要原因是清晰:这意味着人们不需要回头ICollection检查它是否已经延伸IEnumerable

有时您需要重新声明接口实现,如果您想重新实现以前在基类中显式实现的接口方法 - 但我认为这不是这种情况下的原因。

编辑:我一直假设构建文档的源代码具有包括两个接口的声明。另一种可能的选择是层次结构中的所有接口都由文档生成器自动拉入。在这种情况下,问题就变成了“为什么文档生成器会这样做”——答案几乎可以肯定仍然是“清晰”。

于 2009-01-12T07:20:34.940 回答
8

IListIEnumerable由关联实施;即它实现IEnumerable正是因为它继承ICollection了 which is IEnumerable。你会得到相同的类型层次结构(尽管只有单一继承:

class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}

List一个Enumerable; _ 同理,IListIEnumerable

例如,如果我写:

interface IA {}
interface IB : IA { }
interface IC : IB { }

看看元数据,然后看起来IC : IA, IB——但这只是间接的;这是IL:

.class private interface abstract auto ansi IA
{
}
.class private interface abstract auto ansi IB
    implements IA
{
}
.class private interface abstract auto ansi IC
    implements IB, IA
{
}
于 2009-01-12T07:15:16.197 回答
1

如果您要在 ReSharper 中打开代码,则表明不需要IEnumerable接口声明,因为它已经通过.IListICollection

于 2009-01-12T08:36:59.857 回答