迭代器
一、定义
迭代器(iterator)有时又称光标(cursor) 是程序设计的软件设计模式 迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素 而又不暴露其内部的标识
在表现效果上看 是可以在容器对象(例如链表或数组)上遍历访问的接口 设计人员无需关心容器对象的内存分配的实现细节 可以用 foreach 遍历的类,都是实现了迭代器的
二、标准实现迭代器
- 关键接口:IEnumerator,IEnumerable
- 命名空间:using system.collections;
- 可以通过同时继承 IEnumerable 和 IEnumerator 实现其中的方法
foreach 本质
- 先获取 in 后面这个对象的 IEnumerator,会调用对象其中的 GetEnumerator 方法 来获取
- 执行得到这个 IEnumerator 对象中的 MoveNext 方法
- 只要 MoveNext 方法的返回值时 true 就会去得到 current 然后复制给 item
1 | class CustomList : IEnumerable, IEnumerator |
三、通过 yield return 语法糖实现
yield return 是 C#提供给我们的语法糖 所谓语法糖,也称糖衣语法 主要作用就是将复杂逻辑简单化,可以增加程序的可读性 从而减少程序代码出错的机会
- 关键接口:IEnumerable
- 命名空间:using System.Collections;
- 让想要通过 foreach 遍历的自定义类实现接口中的方法 GetEnumerator 即可
1 | class CustomList2 : IEnumerable |