- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章枚举器和迭代器分析
第8章 枚举器和迭代器;8.1 枚举器; 这是因为数组可以按需提供一个称为枚举器(enumerator,或枚举数)的对象。
枚举器可用于依次读取数组中的元素,但不能用于修改基础集合,所以,不能用迭代变量(或枚举变量)item修改myarr的元素。
Array类有一个GetEnumerator方法用于返回当前使用的枚举器,除了Array类外,还有一些其他类型提供了GetEnumerator方法,凡是提供了GetEnumerator方法的类型称为可枚举类型,显然,数组是可枚举类型。;8.1.2 IEnumerator接口; 最初,枚举器被定位于集合中第一个元素的前面。Reset?方法用于将枚举器返回到此位置。在此位置上,未定义?Current。?因此,在读取?Current?的值之前,必须调用?MoveNext将枚举数定位到集合的第一个元素。
?再次调用MoveNext方法将?Current属性定位到下一个元素。如果?MoveNext越过集合的末尾,则枚举器将定位到集合中最后一个元素的后面,而且MoveNext返回?false。?;对于前面的foreach语句的代码,其执行过程如下:;前面foreach语句代码的功能与以下代码是相同的:
int[] myarr = { 1, 2, 3, 4, 5 };
Enumerator ie = myarr.GetEnumerator();
while (ie.MoveNext())
Console.Write({0} ,ie.Current);
Console.WriteLine();;8.1.3 IEnumerable接口; 【例8.1】设计一个学生类Student和一个People类,People类包含若干学生对象,通过从IEnumerable 接口继承使其成为可枚举类型,并设计相应的枚举器类PeopleEnum(从 IEnumerator接口继承)。最后用foreach语句对People类对象执行枚举。;using System;
using System.Collections;
namespace proj8_1
{ public class Student //声明Student类
{ public int id; //学号
public string name; //姓名
public Student(int id,string name) //构造函数
{ this.id = id;
this.name = name;
}
};public class People : IEnumerable //声明可枚举类
{ private Student[] sts; //sts为Student对象数组
public People(Student[] pArray) //People类的构造函数,创建sts
{ sts = new Student[pArray.Length];
for (int i = 0; i pArray.Length; i++)
sts[i] = pArray[i];
}
IEnumerator IEnumerable.GetEnumerator()//实现IEnumerable的GetEnumerator方法
{ return (IEnumerator)GetEnumerator();
//调用People类的GetEnumerator方法,并将结果转换为枚举器对象
}
public PeopleEnum GetEnumerator() //定义People类的GetEnumerator
{ return new PeopleEnum(sts); }
};public class PeopleEnum : IEnumerator //声明枚举器类
{ public Student[] sts;
int position = -1; //位置字段,初始为-1
public PeopleE
文档评论(0)