我不明白为什么IList
实施IEnumerable
考虑到IList
实施ICollection
也实施IEnumerable
。
Crys
问问题
1398 次
3 回答
11
我假设您想知道为什么它声明它实现ICollection
以及IEnumerable
,当第一个暗示第二个时。我怀疑主要原因是清晰:这意味着人们不需要回头ICollection
检查它是否已经延伸IEnumerable
。
有时您需要重新声明接口实现,如果您想重新实现以前在基类中显式实现的接口方法 - 但我认为这不是这种情况下的原因。
编辑:我一直假设构建文档的源代码具有包括两个接口的声明。另一种可能的选择是层次结构中的所有接口都由文档生成器自动拉入。在这种情况下,问题就变成了“为什么文档生成器会这样做”——答案几乎可以肯定仍然是“清晰”。
于 2009-01-12T07:20:34.940 回答
8
IList
仅IEnumerable
由关联实施;即它实现IEnumerable
正是因为它继承ICollection
了 which is IEnumerable
。你会得到相同的类型层次结构(尽管只有单一继承:
class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
List
一个Enumerable
; _ 同理,IList
是IEnumerable
。
例如,如果我写:
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
接口声明,因为它已经通过.IList
ICollection
于 2009-01-12T08:36:59.857 回答