当前位置: 首页 > news >正文

网站关键词重要性育才网站建设

网站关键词重要性,育才网站建设,自己可以做视频网站吗,网站外链快速建设目录 一、可枚举类型和枚举器 1. 枚举器 2. 可枚举类 3. 使用 IEnumerable 和 IEnumerator 案例 4. 泛型枚举接口 二、迭代器 1. 使用迭代器创建枚举器 2. 使用迭代器创建可枚举类 3. 常见的迭代器模式 4. 产生多个枚举类型 5. 将迭代器作为属性 6. 迭代器的实质 一…目录 一、可枚举类型和枚举器 1. 枚举器 2. 可枚举类 3. 使用 IEnumerable 和 IEnumerator 案例 4. 泛型枚举接口 二、迭代器 1. 使用迭代器创建枚举器 2. 使用迭代器创建可枚举类 3. 常见的迭代器模式 4. 产生多个枚举类型 5. 将迭代器作为属性 6. 迭代器的实质 一、可枚举类型和枚举器 数组为什么可以被foreach语句处理原因是数组按需提供了一个枚举器对象。 foreach结构设计用来和可枚举类型一起使用。可枚举类型可以通过GetEnumerator方法获取对象的枚举器。从枚举器中请求每一项并且把它作为迭代变量该变量是只读的。1. 枚举器 枚举器需要实现IEnumerator接口其中包含三个函数成员Current、MoveNext、Reset。 因为数组是可枚举类型所以我们可以通过GetEnumerator方法获取其枚举器对象来模拟foreach遍历通过模拟我们可以初步认识枚举器接口中的这三个方法。 internal class Program {static void Main(string[] args){int[] ints { 5, 6, 7 };IEnumerator enumerator ints.GetEnumerator();//获取数组的枚举器对象while (enumerator.MoveNext()) //MoveNext方法移动指向数组中下标的指针位置并判断是否在数组长度范围内返回一个bool值{int current (int)enumerator.Current;//获取当前指针指向的元素Console.WriteLine(current);}bool beforeReset enumerator.MoveNext();Console.WriteLine(位置重置为原始位置之前enumerator.MoveNext()方法返回{0}, beforeReset);enumerator.Reset();//将位置重置为原始状态//当位置没有重置时enumerator.MoveNext()返回fasle所以不会进入这个while循环无法遍历while (enumerator.MoveNext()) {int current (int)enumerator.Current;Console.WriteLine(current);}}} 2. 可枚举类 前面说过数组是可枚举类型其原因在于数组实现了IEnumerable接口。可枚举类就是指实现了IEnumerable接口的类。  综上可枚举类型是实现了IEnumerable接口的类实现了IEnumerable接口中的GetEnumerator方法返回一个枚举器枚举器是实现了 IEnumerator接口的类通过实现IEnumerator接口三个方法来访问元素。理解图如下 3. 使用 IEnumerable 和 IEnumerator 案例 //枚举器class ColorEnumerator : IEnumerator{string[] _colors;int _position -1;public ColorEnumerator(string[] colors) {_colors new string[colors.Length];Array.Copy(colors,_colors,colors.Length);}public object Current {get{if (_position -1)throw new InvalidOperationException();if (_position _colors.Length)throw new InvalidOperationException();return _colors[_position];}}public bool MoveNext(){if (_position _colors.Length - 1){_position;return true;}elsereturn false; }public void Reset(){_position -1;}}//可枚举类型class Spectrum : IEnumerable{string[] colors { 赤, 橙, 黄, 绿, 青, 蓝, 紫 };public IEnumerator GetEnumerator(){return new ColorEnumerator(colors);}}//测试internal class Program {static void Main(string[] args){Spectrum colors new Spectrum();foreach (string color in colors) Console.WriteLine(color);}} 4. 泛型枚举接口 泛型枚举接口的使用和非泛型枚举接口的使用是差不多的非泛型枚举接口的实现不是类型安全的它们返回object类型的引用必须强转位实际类型泛型枚举接口的实现是类型安全的它们返回的是实际类型的对象而非object基类的引用应该尽量使用泛型枚举接口二、迭代器 迭代器可以代替我们手动编码的可枚举类和枚举器。迭代器块是有一个或多个yield语句的代码块。迭代器块描述了希望编译器为我们创建的枚举器类的行为。迭代器块可以是方法主体、访问器主体或运算符主体。迭代器块中有两个特殊语句i. yield return语句指定了序列中返回的下一项 ii.yield break语句指定在序列中没有其他项 1. 使用迭代器创建枚举器 代码示例 class MyClass {public IEnumeratorstring GetEnumerator() //返回枚举器{return BlackAndWhite();}public IEnumeratorstring BlackAndWhite() //迭代器块{yield return 赤;yield return 橙;yield return 黄;yield return 绿;yield return 青;yield return 蓝;yield return 紫;}} //测试internal class MyTest{static void Main(string[] args){MyClass myClass new MyClass();foreach (string element in myClass)Console.WriteLine(element);}} 代码图解 2. 使用迭代器创建可枚举类 代码示例 class MyClass {public IEnumeratorstring GetEnumerator() //返回枚举器{return BlackAndWhite().GetEnumerator();//返回从可枚举类获取的枚举器}public IEnumerablestring BlackAndWhite() //返回可枚举类{yield return 赤;yield return 橙;yield return 黄;yield return 绿;yield return 青;yield return 蓝;yield return 紫;}} //测试internal class MyTest{static void Main(string[] args){MyClass myClass new MyClass();foreach (string element in myClass)//让类本身可枚举Console.WriteLine(element);Console.WriteLine(--------);foreach (string element in myClass.BlackAndWhite())//调用返回可枚举类的方法Console.WriteLine(element);}} 代码图解 3. 常见的迭代器模式 通过前面的代码案例创建迭代器可以用来产生可枚举类型和枚举器。总结如下 如果我们创建返回枚举器的迭代器时必须实现GetEnumerator方法来让类可枚举。如果我们创建返回可枚举类型的迭代器时我们有两种选择选择1:实现GetEnumerator让类本身可枚举 选择2:不实现GetEnumerator让类本身不可枚举但仍可使用由迭代器产生的可枚举类 4. 产生多个枚举类型 可以在同一个类中创建多个迭代器来产生多个枚举类型。 //注意该类中没有实现GetEnumerator方法所以该类本身不可以被枚举但可以通过迭代器返回的枚举类型进行遍历class MyClass {string[] colors { 赤, 橙, 黄, 绿, 青, 蓝, 紫 };public IEnumerablestring PrintOut() //迭代器返回可枚举类型{for (int i 0; i colors.Length; i)yield return colors[i];}public IEnumerablestring ReversePrintOut() //迭代器返回可枚举类型{for(int i colors.Length-1; i 0; i--)yield return colors[i];}} //测试internal class MyTest{static void Main(string[] args){MyClass myClass new MyClass();foreach (string color in myClass.PrintOut())Console.WriteLine(color);Console.WriteLine(--------);foreach (string color in myClass.ReversePrintOut())Console.WriteLine(color);}} 5. 将迭代器作为属性 可以将迭代器作为属性。代码示例如下 class Colors {bool chooseEnumerator;string[] colors { 赤, 橙, 黄, 绿, 青, 蓝, 紫 };public Colors(bool b) {chooseEnumerator b;}//根据创建类对象时传入的布尔值控制返回不同的枚举器public IEnumeratorstring GetEnumerator() {return chooseEnumerator ? PrintOut : ReversePrintOut;}public IEnumeratorstring PrintOut //迭代器放置在属性get访问器中{get {for (int i 0; i colors.Length; i)yield return colors[i];}}public IEnumeratorstring ReversePrintOut //迭代器放置在属性get访问器中{get {for (int i colors.Length - 1; i 0; i--)yield return colors[i];}}} //测试internal class MyTest{static void Main(string[] args){Colors colors new Colors(true);foreach (string color in colors)Console.WriteLine(color);Console.WriteLine(--------);Colors reColors new Colors(false);foreach (string color in reColors)Console.WriteLine(color);}} 6. 迭代器的实质 迭代器需要using指令引入System.Collections.Generic的命名空间。在编译器生成的枚举器中Reset方法没有实现调用会抛异常。 由编译器生成的枚举器是包含四个状态的状态机。Before首次调用MoveNext的初始状态。Running调用MoveNext后进入这个状态。在这个状态中枚举器检查并设置下一项的位置在遇到yield return、yield break或在迭代器体结束时退出状态。Suspended状态机等待下次调用MoveNext的状态。After没有更多项可以枚举。注本章学习总结自《C#图解教程》
http://www.w-s-a.com/news/492394/

相关文章:

  • 网络安全形势下怎么建设学校网站wordpress最新主题下载
  • 自己建设网站需要什么条件.gs域名做网站怎么样
  • 网上做公益的网站推广手机卡返佣平台
  • 网站是公司域名是个人可以南京建设银行官方网站
  • 做互联网网站的会抓百度网盟推广 网站
  • 商务网站开发设计结论微信报名小程序怎么制作
  • 网站建设销售简历wordpress七比2
  • 制作网站报价工程项目查询哪个网站
  • 深圳移动网站建设制作公司网站建设的认识
  • 网站建设脚本语言有哪些想开网店哪个平台好
  • 视频网站用什么做的好深圳的小程序开发公司
  • 南京网站定制开发商城网站免费模板
  • 青海学会网站建设公司照片组合拼图
  • 中国建设银行福清分行网站爱站网权重查询
  • 外贸通网站建设网站建设7个主要流程图
  • 元气森林网络营销方式医疗网站优化怎么做
  • 手机网站制作报价表做网站公司做网站公司
  • 湖州网站设计吉林网站建设哪家好
  • 做存储各种环境信息的网站使用tag的网站
  • 阿里云用ip做网站网站开发员属于
  • 外链网盘下载南宁seo推广优化
  • 网站的推广方案有哪些此网站可能有
  • wordpress更改链接后网站打不开一键生成个人网站
  • 网站建设后台有哪些东西前端开发培训一般多少钱
  • 高端建设网站公司网站开发 源码
  • 企业网站的劣势园林景观设计公司简介范文
  • 网站建设程序招聘东营建设信息网登录
  • o2o是什么意思通俗讲seo与网站优化 pdf
  • 外贸网站外包一般建设一个网站多少钱
  • 抄袭别人网站的前端代码合法吗网络促销策略