Unity中迭代器和协程的部分概念
协程本质上也是一个迭代器,为了记录一下今天对二者的学习和巩固记录一下今天的知识点。
首先了解一下迭代器的知识:
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。C#中使用IEnumerator接口实现,Java中使用Iterator接口实现,其中原理都差不多,下面我就用C#代码来演示下迭代器的实现。
namespace System.Collections//这是C#的迭代器底层方法 { public interface IEnumerator { object Current { get; } // bool MoveNext(); void Reset(); } } Current 是作为返回的正确对象,获取当前下标所指向的对象。如我们foreach时遍历返回的那个正确对象
MoveNext 即是遍历该对象时,检查并确认下一个位置的对象是否为空,如foreach时编译器来判断是否遍历到最后一个
Reset 是我们在多次使用迭代器时下标如果不更新为第一个的话,那么Current就会一直是上一次操作读取下标的对象,如果我们需要重新遍历则该下标之前的数据就找不到。所以Reset则是更新下标为第一个。
迭代器的一大特点就是可以数据封装起来,无论什么类型的数据都可以放到一个迭代器里,方便管理和读取。这样我们就可以根据自己开发需要去创建自己的数据类型,再利用迭代器去管理和遍历获取。
简单的重写一下三个方法加深理解
Current(){ Get{ return List[index]; } } MoveNext(){ If(index<list.Length) { Return true; } Else Return false } Reset() { Current = null; Index = 0; } 总结: 通过实现IEnumerator接口,我们可以创建自定义的迭代器,方便地对集合进行遍历。