Collection <T>:为什么它实现IEnumerable和IEnumerable <T>?

Bob*_*r02 2 c# generics collections

我知道StackOverflow上出现了完全相同的问题,但它并没有完全回答我的问题.

如果ICollection<T>实现IEnumerable<T>,扩展IEnumerable,为什么来自Microsoft的程序员添加IEnumerable作为实现的接口ICollection<T>

是不是完全(语义和实现方式)与简单写作相同ICollection<T> : IEnumerable<T>

Ant*_*ram 5

它说它实现,IEnumerable 因为它实现IEnumerable.

IEnumerable<T>继承IEnumerable,但它显然不提供任何实现.实现的类也IEnumerable<T> 必须实现IEnumerable,无论它们是否明确声明它们这样做.

class Foo : IEnumerable<T> 
class Foo : IEnumerable<T>, IEnumerable
Run Code Online (Sandbox Code Playgroud)

无论哪种情况,您都可以实现两个接口的成员.第二个类定义简单地让那些看着类和/或文档的人明白,这是一件好事.没有经验的或其他不知情的读者可能不知道这IEnumerable<T>会带来IEnumerable它.他们可能不知道实现的类IEnumerable<T>可以在IEnumerable预期的地方使用.这只是为读者提供了更多的信息,平均而言这只是一件好事.

  • 像IlDasm和Reflector这样的工具倾向于显示第二个更长的形式.无论它是如何写的. (2认同)