我不明白为什么IList
实现了IEnumerable
,考虑到IList
已经实现了ICollection
,而ICollection
也实现了IEnumerable
。
我不明白为什么IList
实现了IEnumerable
,考虑到IList
已经实现了ICollection
,而ICollection
也实现了IEnumerable
。
ICollection
和IEnumerable
,当第一个接口已经包含第二个接口时。我认为主要原因是为了明确清晰:这意味着人们不需要回到ICollection
去检查是否已经扩展了IEnumerable
。IList
仅通过关联实现IEnumerable
。也就是说,它之所以实现IEnumerable
,是因为它继承了ICollection
,而ICollection
是IEnumerable
。类型层次结构(虽然仅支持单继承)也会得到相同的结果。
class Enumerable {}
class Collection : Enumerable {}
class List : Collection {}
所以List
是可枚举的;同样,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
{
}