IEnumerable、GetEnumerator、IEnumerator之间的区别

原帖地址
MSDN
一、IEnumerator

该接口定义需要实现以下方法:

1、Current:获取集合中的当前元素。

2、MoveNext:将枚举数推进到集合的下一个元素。

3、Reset: 将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。

实现以上方法的类也就意味着这个集合类能够被遍历访问。

二、IEnumerable

able意味着这个类能够达到上面IEnumerator的效果, 事实上也是如此,可以从这个接口定义方法中看出来:

GetEnumerator: 返回一个IEnumerator类型的值

IEnumerable是集合类的基础, 它解决了集合类如何遍历的问题, 所以更高级的集合类和接口都是继承IEnumerable

所有能够使用foreach遍历的集合类,都必须继承IEnumerable接口

三、IEnumerable、GetEnumerator、IEnumerator之间的关系

  1. 一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator对象)。

  2. IEnumerator对象具体实现了iterator(通过MoveNext(),Reset(),Current)。

  3. 从这两个接口的用词选择上,也可以看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的class是“可枚举(enumerable)”的,但并没有说明如何实现枚举器(iterator);IEnumerator是一个实现式的接口,IEnumerator对象就是一个iterator(迭代器)。

  4. IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,可以通过IEnumerable的GetEnumerator()得到IEnumerator对象。

  5. 由于IEnumerable扩展(继承)了旧的IEnumerable接口,所以要实现两个不同的方法:
    IEnumerator GetEnumerator();
    IEnumerator GetEnumerator(); // 由于和泛型版本的方法同名,所以该方法的实现需要使用显式接口实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值