为什么ICollection<T>
实现了IEnumerable<T>
和IEnumerable
?为什么ICollection <T>实现IEnumerable <T>和IEnumerable
这是什么目的? IEnumerable
如何受益ICollection<T>
?
为什么ICollection<T>
实现了IEnumerable<T>
和IEnumerable
?为什么ICollection <T>实现IEnumerable <T>和IEnumerable
这是什么目的? IEnumerable
如何受益ICollection<T>
?
非通用接口用于向后兼容。如果您使用泛型编写代码并想将集合传递给以.NET 1.0编写的某个模块(它没有泛型),那么您仍然希望这样做能够成功,并且您希望旧方法能够遍历它。
IEnumerable<T>
继承IEnumerable
所以它也适用于ICollection<T>
。它只是明确地陈述将继续存在的遗传。
IEnumerable<T>
本身强制任何实现也执行非泛型IEnumerable
。这是安全的,因为与.NET 4一样,IEnumerable<out T>
是协变的...您始终可以将T
转换为object
作为非通用形式。
基本上这意味着如果你的代码使用IEnumerable
类型的参数,你仍然可以用类似List<T>
的方法来调用它。
埃里克利珀写了blog post recently为什么藏品最终实现多个接口,和布拉德·艾布拉姆斯写了blog post back in 2005关于特定IEnumerable<T>
/IEnumerable
决定。
有点类似:[why-does-ienumerablet-inherit-from-ienumerable?](http://stackoverflow.com/questions/221691/why-does-ienumerablet-inherit-from-ienumerable?rq=1) – nawfal 2014-06-08 08:59:24