返回列表 回复 发帖

关于迭代器的问题

关于迭代器 有些看不明白,请老师、高手帮忙指点迷津,谢谢。

书中说:如果要创建一个泛型迭代器,往往需要实现IEnumerable 和IEnumerable<T>接口的GetEnumerator()方法。

问题1:既然实现了IEnumerable<T>接口,为什么还要实现非泛型IEnumerable的接口?

问题2:既然要实现两个接口,为什么在书中P217页,“public class MyIterator<T>:IEnumerable<T>”为什么不继承IEnumerable接口,而是在P218页使用了一个很看不懂的实现该接口的方法。(“IEnumerator IEnumerable.GetEnumerator(){return GetEnumerator();}”)
这个实现不是自身对自身的调用吗?并没有具体的方法体呀。
周末老师也应该休假了
迭代器是C# 2.0中的新功能,它是方法、get访问器或运算符,它使开发人员能够在类或结构中支持foreach迭代,而不必实现整个IEnumerable接口。只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,它将自动生成IEnumerable或IEnumerable接口的Current、MoveNext和Dispose方法。迭代器有以下特点:
迭代器是可以返回相同类型值的有序序列的一段代码;
迭代器可用作方法、运算符或get访问器的代码体;
迭代器代码使用yield return语句依次返回每个元素,yield break将终止迭代;
可以在类中实现多个迭代器,每个迭代器都必须像任何类成员一样有惟一的名称,并且可以在foreach语句中被客户端代码调用;
迭代器的返回类型必须为IEnumerable和IEnumerator中的任意一种;? 迭代器是产生值的有序序列的一个语句块,不同于有一个 或多个yield语句存在的常规语句块;
迭代器不是一种成员,它只是实现函数成员的方式,理解这一点是很重要的,一个通过迭代器实现的成员,可以被其他可能或不可能通过迭代器实现的成员覆盖和重载;
迭代器块在C#语法中不是独特的元素,它们在几个方面受到限制,并且主要作用在函数成员声明的语义上,它们在语法上只是语句块而已;
MyIterator<T>是泛型,因此必须继承IEnumerable<T>
还是不太懂,再看看书体会一下:dizzy:
5# bool_sir


有一些东西,慢慢理解。
返回列表