IEnumerable接口

Cor*_*nel 4 c# ienumerable inheritance

我不明白为什么IList实现IEnumerable考虑到也IList实现的ICollection实现IEnumerable.

Jon*_*eet 11

我假设你想知道为什么它声明它实现ICollection以及IEnumerable,当第一意味着第二.我怀疑主要原因是清晰度:这意味着人们不需要回头ICollection检查已经延伸的情况IEnumerable.

还有一些时候你需要重新声明一个接口实现,如果你想重新实现一个先前在基类中明确实现的接口方法 - 但我认为这不是这种情况的原因.

编辑:我一直在假设构建文档的源代码具有包含两个接口的声明.另一种可能的替代方案是层次结构中的所有接口都由doc生成器自动引入.在这种情况下,问题变成"为什么文档生成器会这样做" - 答案几乎肯定仍然是"清晰度".


Mar*_*ell 8

IList只能IEnumerable通过associaton 实现; 即它实现的IEnumerable正是因为它继承了ICollection哪个IEnumerable.您将获得与类型层次结构相同的内容(尽管只有单个继承:

class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
Run Code Online (Sandbox Code Playgroud)

所以List是一种Enumerable; 以同样的方式,IListIEnumerable.

例如,如果我写:

interface IA {}
interface IB : IA { }
interface IC : IB { }
Run Code Online (Sandbox Code Playgroud)

看看元数据,然后看起来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
{
}
Run Code Online (Sandbox Code Playgroud)