张扬果儿资料,嘉宾出场音乐,庆春电影城
1、c#迭代器
1.1、ienumerable和ienumerator
c#中的迭代器封装在ienumerable和ienumerator和他们的泛型接口中。
ienumerable:定义了一个可以获取ienumerator的方法---getenumerator()。
//ienumerable的代码实现 public interface ienumerable { ienumerator getenumerator(); }
ienumerator:则在目标序列上实现循环迭代,直到不再需要数据。常见的foreach循环就是使用这个接口
//ienumerator的代码实现 public interface ienumerator { /// <summary> /// 获取当前的项(只读属性) /// </summary> object current { get; } /// <summary> /// 将游标的内部位置向前移动 /// </summary> /// <returns>是否成功</returns> bool movenext(); /// <summary> /// 将游标重置到第一个成员前面 /// </summary> void reset(); }
但是为什么会有两个接口呢?为什么不直接让ienumerable实现所有方法呢?
为了不违背单一职责原则。如果有几个嵌套的foreach循环,那么彼此就可能会收到影响了。
1.2、迭代器使用
c#中的数组和集合都是继承了ienumerable接口的,所以我们可以直接使用。
static void main(string[] args) { int[] arr = new int[5] { 12, 65, 749, 16, 49 }; //foreach (int item in arr) //{ // console.writeline(item); //} #region 和上面的foreach相同 ienumerator e = arr.getenumerator(); //获取要迭代的对象 while (e.movenext()) //一个一个的读取元素,读取完会返回false { console.writeline(e.current); //输出读取内容 } #endregion }
自定义类中使用迭代器。
/// <summary> /// 动物园类,里面有很多动物 /// </summary> public class zoo : ienumerable { animal[] animals = new animal[3]; public zoo() { animals[0] = new animal("张三"); animals[1] = new animal("李四"); animals[2] = new animal("赵五"); } public ienumerator getenumerator() { return this.animals.getenumerator(); } } /// <summary> /// 动物类,每个动物有其名字 /// </summary> public class animal { private string name; public string name { get { return name; } } public animal(string name) { this.name = name; } } static void main(string[] args) { zoo zoo = new zoo(); //可以直接使用foreach迭代 foreach (animal animal in zoo) { console.writeline(animal.name); } console.readkey(); }
2、unity中的协程
2.1、进程 线程 协程介绍
进程:
线程:
协程:
2.2、协程使用
unity的协程系统是基于c#的一个简单而强大的接口 ,ienumerator。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
浅谈Visual Studio 2019 Vue项目的目录结构
Visual Studio 2019配置vue项目的图文教程详解
网友评论