4.C#2.0之迭代器(未完成)

  4.1迭代器块

     迭代器块就是产生值的有序序列的语句块,迭代器块通过一个/多个yield语句区别于常规语句:

          -yield return 语句产生迭代的下一个值

          -yield break 语句指明迭代完成

     迭代器块可以用做一个方法体、运算符体、访问器体,前提是对应函数成员的返回类型是枚举器接口之一/可枚举接口之一。

     迭代器块在C#语法中不是独特的元素,它们在几个方面受限制,并且主要作用在函数成员声明的语义上,它们在语法上只是语句块而已。当一个函数成员使用迭代器块实现时,该函数成员的正式参数列表指定任何ref/out参数都将导致编译时错误;return出现在迭代器块中也会导致编译时错误,但yield return语句是允许的;在迭代器块中包含不安全上下文也会导致编译时错误,即便迭代器声明在不安全上下文中,迭代器块总是定义为一个安全上下文。

   4.1.1 枚举器接口

     枚举器接口是System.Collections.IEnumerator接口和System.Collections.Generic.IEnumerator<T>的所有实例。

   4.1.2 可枚举接口

     可枚举接口是System.Collections.IEnumerable接口和System.Collections.Generic.IEnumerable<T>的所有实例。

   4.1.3 yield类型

     迭代器块生成具有相同类型的所有值的序列。该类型被称为迭代器块的yield类型:

         -通常用于实现返回IEnumerator/IEnumerable的函数成员的迭代器块的yield类型是object;

          -通常用于实现返回IEnumerator<T>/IEnumerable<T>的函数成员的迭代器块的yield类型是T。

   4.1.4 this访问

     在类的实例成员的迭代器块内,this表达式是值,该值的类型是类类型。在这个类型内可以采用这种用法,这个值就是成员被调用时对对象的引用。

     在结构的实例成员的迭代器块内,this表达式被当作一个变量,该变量的类型就是结构类型。在这个结构内它可以采用这种用法,该变量表示一个成员被调用时的对应结构的一个拷贝。在结构实例成员的迭代器块内,this变量的行为就好像是结构类型的一个值参数。

  4.2枚举对象

     发

猜你喜欢

转载自www.cnblogs.com/dreamoffire/p/10192922.html
今日推荐