为什么ICollection<T>
同时实施IEnumerable<T>
和IEnumerable
?
这是为了什么目的? IEnumerable
如何使ICollection<T>
受益?
答案 0 :(得分:12)
IEnumerable<T>
本身强制任何实现也实现非泛型IEnumerable
。这是安全的,原因与{4}在.NET 4中的协变性相同......您可以随时将IEnumerable<out T>
转换为T
以获取非泛型形式。
基本上这意味着如果您的代码使用object
类型的参数,您仍然可以使用类似IEnumerable
的内容来调用它。
Eric Lippert写了一篇关于为什么集合最终实现了许多接口的blog post recently,而Brad Abrams写了一篇关于特定List<T>
/ IEnumerable<T>
决定的blog post back in 2005。
答案 1 :(得分:9)
非通用接口是为了向后兼容。如果你使用泛型编写代码并希望将你的集合传递给用.NET 1.0编写的某个模块(没有泛型),你仍然希望这个成功,并且你希望旧方法能够遍历它。 / p>
答案 2 :(得分:-1)
IEnumerable<T>
继承IEnumerable
因此对ICollection<T>
也有意义。它只是明确说明了那里的继承。