IEnumerable、GetEnumerator、IEnumerator之间的区别
来源:互联网 发布:网络mc第一红人比赛 编辑:程序博客网 时间:2024/05/19 12:24
原帖地址
MSDN
一、IEnumerator
该接口定义需要实现以下方法:
1、Current:获取集合中的当前元素。
2、MoveNext:将枚举数推进到集合的下一个元素。
3、Reset: 将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
实现以上方法的类也就意味着这个集合类能够被遍历访问。
二、IEnumerable
able意味着这个类能够达到上面IEnumerator的效果, 事实上也是如此,可以从这个接口定义方法中看出来:
GetEnumerator: 返回一个IEnumerator类型的值
IEnumerable是集合类的基础, 它解决了集合类如何遍历的问题, 所以更高级的集合类和接口都是继承IEnumerable
所有能够使用foreach遍历的集合类,都必须继承IEnumerable接口
三、IEnumerable、GetEnumerator、IEnumerator之间的关系
一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator对象)。
IEnumerator对象具体实现了iterator(通过MoveNext(),Reset(),Current)。
从这两个接口的用词选择上,也可以看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的class是“可枚举(enumerable)”的,但并没有说明如何实现枚举器(iterator);IEnumerator是一个实现式的接口,IEnumerator对象就是一个iterator(迭代器)。
IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,可以通过IEnumerable的GetEnumerator()得到IEnumerator对象。
由于IEnumerable扩展(继承)了旧的IEnumerable接口,所以要实现两个不同的方法:
IEnumerator GetEnumerator();
IEnumerator GetEnumerator(); // 由于和泛型版本的方法同名,所以该方法的实现需要使用显式接口实现
- IEnumerable、GetEnumerator、IEnumerator之间的区别
- IEnumerable、GetEnumerator、IEnumerator之间的关系
- IEnumerable和 IEnumerator的区别
- IEnumerator和IEnumerable的区别
- C#:IEnumerable 与 IEnumerator的区别
- IEnumerable IEnumerator区别
- IEnumerable与IEnumerator区别
- IEnumerable 与IEnumerator区别
- IEnumerable和IEnumerator区别
- IEnumerable与IEnumerator区别
- IEnumerable 与IEnumerator区别
- IEnumerable和IEnumerator区别
- IEnumerator和IEnumerable区别
- IEnumerable与IEnumerator区别
- IEnumerator和IEnumerable区别
- IEnumerable与IEnumerator区别
- IEnumerable与IEnumerator区别
- IEnumerable与IEnumerator区别
- 12、Spring技术栈-Redis Sentinel实现高可用缓存集群方案实战
- mysql常用命令
- 《颠覆者》感悟
- dp与px的转换对照表
- JAVA设计模式之迭代器模式
- IEnumerable、GetEnumerator、IEnumerator之间的区别
- 系统间通信方式之(ActiveMQ的使用性能优化之干柴烈火4)(十五)
- CHAPTER 14 -Recurrent Neural Networks
- undefined reference to `__aeabi_uidivmod'和undefined reference to `__aeabi_uidiv'错误
- 理解Android Binder架构
- JAVA集合
- 关于等价鞅、反等价鞅、剀利公式、赌徒输光定理(非常有启发意义)
- Boost组件实用工具
- SQLServer中Partition By 函数的使用