我知道 StackOverflow 上出现了完全相同的问题,但它并没有完全回答我的问题。
如果ICollection<T>
实现了扩展IEnumerable<T>
的{{1}},为什么来自 Microsoft 的程序员添加IEnumerable
作为{{1}的接口实现?
它是否完全(语义和实现方式)与简单地编写IEnumerable
相同?
答案 0 :(得分:5)
它说它实现了IEnumerable
,因为它实现了IEnumerable
。
IEnumerable<T>
继承IEnumerable
,但显然不提供任何实现。实现IEnumerable<T>
的类还必须实现IEnumerable
,无论他们是否显式声明他们这样做。
class Foo : IEnumerable<T>
class Foo : IEnumerable<T>, IEnumerable
无论是哪种情况,都可以实现两个接口的成员。第二类定义简单地使那些看着类和/或文档的人明白,这是一件好事。没有经验或其他不知情的读者可能不知道IEnumerable<T>
带来IEnumerable
。他们可能不知道实现IEnumerable<T>
的类可以在期望IEnumerable
的地方使用。这简单地为读者提供了更多的信息,这平均只是一件好事。