我不明白为什么IList实现IEnumerable考虑ICollection实现<=>来实现<=>。

有帮助吗?

解决方案

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

如果您想重新实现之前在基类中明确实现的接口方法,还有其他时候需要重新声明接口实现 - 但我认为这不是这种情况的原因。 / p>

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

其他提示

IList只能通过associaton实现IEnumerable;即它实现ICollection精确,因为它继承List,即Enumerable。您将获得与类型层次结构相同的内容(尽管只有单个继承:

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

所以IC : IA, IB是<=>;以同样的方式,<=>是<=>。

例如,如果我写:

interface IA {}
interface IB : IA { }
interface IC : 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
{
}

如果要在ReSharper中打开代码,则表明IEnumerable上的IList接口声明不是必需的,因为它已经通过ICollection指定。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top