1、C#迭代器
1.1、IEnumerable和IEnumerator
C#中的迭代器封装在IEnumerable和IEnumerator和他们的泛型接口中。
IEnumerable:定义了一个可以获取IEnumerator的方法—GetEnumerator()。
//IEnumerable的代码实现 publicinterfaceIEnumerable { IEnumeratorGetEnumerator(); }
IEnumerator:则在目标序列上实现循环迭代,直到不再需要数据。常见的foreach循环就是使用这个接口
//IEnumerator的代码实现 publicinterfaceIEnumerator { ///<summary> ///获取当前的项(只读属性) ///</summary> objectCurrent{get;} ///<summary> ///将游标的内部位置向前移动 ///</summary> ///<returns>是否成功</returns> boolMoveNext(); ///<summary> ///将游标重置到第一个成员前面 ///</summary> voidReset(); }
但是为什么会有两个接口呢?为什么不直接让IEnumerable实现所有方法呢?
为了不违背单一职责原则。如果有几个嵌套的foreach循环,那么彼此就可能会收到影响了。
1.2、迭代器使用
C#中的数组和集合都是继承了IEnumerable接口的,所以我们可以直接使用。
staticvoidMain(string[]args) { int[]arr=newint[5]{12,65,749,16,49}; //foreach(intiteminarr) //{ //Console.WriteLine(item); //} #region和上面的foreach相同 IEnumeratore=arr.GetEnumerator();//获取要迭代的对象 while(e.MoveNext())//一个一个的读取元素,读取完会返回false { Console.WriteLine(e.Current);//输出读取内容 } #endregion }
自定义类中使用迭代器。
///<summary> ///动物园类,里面有很多动物 ///</summary> publicclassZoo:IEnumerable { Animal[]animals=newAnimal[3]; publicZoo() { animals[0]=newAnimal("张三"); animals[1]=newAnimal("李四"); animals[2]=newAnimal("赵五"); } publicIEnumeratorGetEnumerator() { returnthis.animals.GetEnumerator(); } } ///<summary> ///动物类,每个动物有其免费精选名字大全 ///</summary> publicclassAnimal { privatestringname; publicstringName{get{returnname;}} publicAnimal(stringname) { this.name=name; } } staticvoidMain(string[]args) { Zoozoo=newZoo(); //可以直接使用foreach迭代 foreach(Animalanimalinzoo) { Console.WriteLine(animal.Name); } Console.ReadKey(); }
2、Unity中的协程
2.1、进程线程协程介绍
进程:
进程有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。 进程是有独立功能的程序关于某个数据集合上的一次运行活动。
线程:
线程有自己独立的栈和共享的堆,共享堆,不共享栈。线程由操作系统调度。 一个进程可以包含多个线程。 线程异步运行,多处理器中多个线程可同时运行。
协程:
协程共享堆,不共享栈,协程由程序员在协程的代码里显示调度。 协程执行在游戏主线程上,同一时间只能执行一个协程。 线程避免了无意义的调度,提高了性能,但需要程序员自己承担调度责任。
2.2、协程使用
Unity的协程系统是基于C#的一个简单而强大的接口,IEnumerator。
您可能感兴趣的文章:php和C#的yield迭代器实现方法对比分析C#学习笔记整理-迭代器模式介绍C#使用yield关键字构建迭代器详解C#中使用迭代器处理等待任务C#特性迭代器(下)yield以及流的延迟计算C#特性-迭代器(上)及一些研究过程中的副产品C#迭代器模式(IteratorPattern)实例教程
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
mysql 字段类型说明
上述就是C#学习教程:C#迭代器及Unity协程实例解析分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/903890.html