ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:19.31KB ,
资源ID:3928449      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3928449.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第16章 索引器.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

第16章 索引器.docx

1、第16章 索引器第16章 索引器目 标学习完本章之后,你应该能够掌握以下概念: 什么是索引器 如何定义和使用索引器 索引器和属性的区别 如何为接口创建索引器 使用索引器的目的 如何创建只读索引器 如何为结构创建索引器引 言索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于索引器的访问器采用参数。本章将介绍索引器在类、结构以及接口中的应用。16.1 索引器16.1.1 什么是索引器可以将索引器理解为一种属性,但是其特性与一般属性并不相同。首先其访问器即get代码块采用参数,另外其作用也不相同。索引器可以为类提供类似数组索引的访问方式。索引器有以下特点: 索引器使

2、得对象可按照与数组相似的方法进行索引。 get访问器返回值,set访问器分配值。 this关键字用于定义索引器。 value关键字用于定义由set索引器分配的值。 索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。 索引器可被重载。 索引器可以有多个形参,例如当访问二维数组时。16.1.2 索引器的目的索引器的目的在于为类提供与数组相似的方法进行索引。这里读者可以先回忆一下数组的使用方式,定义一个数组后,便可以方便地对数组中特定位置的元素进行访问或设置。如下代码演示了一个最简单的数组及其使用方法:。using SystemText;namespace Example16_1 cla

3、ss Program static void Main(strin gargs) /定义一个大小为100的整型数组 int intArray=new int100; /分别为数组中的每个元素赋值 for(int i=0;i100;i+) intArrayi = i*5; /输出intArray数组中所有元素的值 for(int i=0;i100;i+) ConsoleWriteLine(”intArrayO的值为:1”,i,i*5); ConsoleReadLine(); 程序运行结果如下intArrayO的值为:0intArray1的值为:5intArray2的值为:10intArray3的

4、值为:15intArray4的值为:20intArray5的值为:25intArray6的值为:30intArray7的值为:35intArray8的值为:40intArray9的值为:45intArray10的值为:50intArray1l的值为:55intArray12的值为:60intArray13的值为:65intArray14的值为:70intArray15的值为:75intArray16的值为:80这里只显示了一部分结果,结果最后的省略号并非程序输出。16.1.3 定义索引器索引器的定义非常简单,如下的代码段就定义了一个简单的索引器 C1ass IntSet /定义一个大小为100

5、的整型数组 int intArray=new int100; / /索引 /intArray的相应值 public int thisint i get return intArrayi; set intArrayi=value; ) ) 索引器的定义采用访问限定符后跟返回值类型、this关键字、索引参数。其中,索引参数要包含在索引操作符“”中。索引器的使用参见下面的小节。16.1.4 使用索引器索引器的使用比较简单,只需在对象名后加索引操作符和索引即可。下面的实例演示了类中索引器的用法:namespace Example16_2 class Program static void Main(S

6、trin gargs) /定义一个IntSet类型对象,并为其中部分值赋值。 IntSet myIntSet=new IntSet(); for(int i=0;i10; i+) myIntSeti*10=i*4; ) /输出已经改变的值 for(int i=0;i10;i+) ConsoleWriteLine(myIntSetO的值:l”,i*10,myIntSeti*10); ) /输出部分未改变的值 ConsoleWriteLine(myIntSetO)的值为:1)”,1,myIntSet1); ConsoleWriteLine(myIntSetO的1直为:1)”,12,myIntSet

7、12); ConSoleReadLine(); / /演示索引器使用方法的整数集合类 / C1ass IntSet / /构造函数 / public IntSet() /分别为数组中的每个元素赋值0 for(int i=0; i100; i+) intArrayi=0; /定义一个大小为100的整型数组 int intArray=new int100; / /类IntSet的索引器 / /索引 /intArray的相应值 public int thisint i get return intArrayi; set intArrayi=value ; ) 可以看到,实例中通过索引器的方法为数组中

8、所有1 0的倍数位置的元素进行了赋值操作,后又通过索引器的方法访问并输出其元素的值。其结果比较明显。索引器的应用并不仅仅限于这种简单的数据类型,如整数。如可以定义一个班级类,通过班级类的索引器可以返回班级中的学生。下面的实例简单实现了上段的描述:USing SyStem;USing SystemCollectionsGeneric;USing SystemText;namespace Example16_3 class Program static void Main(Stringargs) Class myClass=new Class(”一年级一班”); /为班级中学生的姓名赋值 myCl

9、asS0Name=”Liu”; myClass1Name=”Wang”; myClasS2Name=”Li”; myClaSS3Name=”Zhang”; myClass4Name=”Wu”; myClass5Name=”Zhao”; myClaSS6】Name=”Mu”; myClass7Name=”Yuan”; myClass8Name=”Lei”; myClass9Name = Sun; / 输出班级中的所有学生 for(int i=0;i10;i+) ConsoleWriteLine(O的1号学生的姓名为:2”,myClassName, i,myClassiName); Console

10、ReadLine(); / /一个学生类的简单实现。 / class Student public Student(string name,int number) /初始化学生的姓名和学号 m_name=name; m_number=number; private string m_name=stringEmpty; private int m_number = 0; public string Name get return m_name; ) set m_name。value; public int Number get return m_number; set m_number=valu

11、e; ) ) class C1ass public Class(string name) /初始化相应的参数 m_name=name; for(int i=0;i10; i+) studentsi=new Student(iToString(),i); private String m_name; private Student students=new Student10; public string Name get return m_name; set m_name=value; public Student thisint i get return studentsi; set stu

12、dentsi=value; ) )程序运行结果如下:一年级一班的0号学生的姓名为:Liu一年级一班的1号学生的姓名为:Wang一年级一班的2号学生的姓名为:Li一年级一班的3号学生的姓名为:Zhang一年级一班的4号学生的姓名为:Wu一年级一班的5号学生的姓名为:Zhao一年级一班的6号学生的姓名为:Mu一年级一班的7号学生的姓名为:Yuan一年级一班的8号学生的姓名为:Lei一年级一班的9号学生的姓名为:Sun 上面演示了一个相对比较复杂的实例,但仍与真实项目中的建模有相当的差距。 阅读上面的实例时,读者只需把握这样一种关系,即班级由学生构成,学生有姓名和学号这两种属性。实例就是通过索引器的

13、方式访问班级中的学生。16.1.5 只读索引器 与属性一样,索引器也可以设计为只读。只需放弃索引器中set代码块的编写即可。下面的代码实现了一个简单的索引器,该索引器为只读: class IntSet public IntSet() /分别为数组中的每个元素赋值0 for(int i=0;i100;i+) intArrayi=0; ) int intArray=new int100; public int thisint i get return intArrayi; ) ) 其使用方法与只读属性相同,不能对其进行赋值操作,否则将会引发错误。16.2 其他结构中的索引器索引器不仅存在于类中,C

14、#中其他的结构也可以使用索引器,如结构和接口。本节介绍索 引器在结构和接13中的使用方法。16.2.1 结构中的索引器同类一样,结构中也可以使用索引器。但在使用时要注意结合结构自身的特点进行设计。下面的实例演示了在结构中使用索引器的方法:using System;using SystemCollectionsGeneric;using SystemText;namespace Example16_4 clas s Program static void Main(string args) /定义一个IntStruct类型对象,并为其中部分值赋值。 IntStruct myIntStruct=n

15、ew IntStruct(100)j for(int i=0;i10; i+) myIntStructi*10 = i; 输出已经改变的值 for(int i=0;i10;i+) ConsoleWriteLine(”myIntStructO的值为:1)”,i*10, myIntStructi*10); )输出部分未改变的值 ConsoleWriteLine(myIntStruct0的值为:l,1,myIntStruct1); ConsoleWriteLine(myIntStruct0)的值为:1,12,myIntStruct12); Conso1eReadLine(); Struct IntS

16、truct / /构造函数 / public IntStruct(int size) intArray=new intsize; /分别为数组中的每个元素赋值0 for(int i=0; isize;i+) intArrayi=0; ) /定义一个大小为100的整型数组 int intArray; / /类IntSet的索;】器 / /索引 /intArray的相应值 public int thisint i get return intArrayi; ) set intArrayi=value; 程序运行结果如下myIntStructO的值为:0myIntStruct10的值为:1myInt

17、Struct20的值为:2myIntStruct30的值为:3myIntStruct40的值为:4myIntStruct50的值为:5myIntStruct60的值为:6myIntStruct70的值为:7myIntStruct80的值为:8myIntStruct90的值为:9 myIntStruct1的值为:0 myIntStruct12的值为:0 可以看到,其使用方式与在类中使用索引器基本相同。此处就不赘述了,读者可以根据项目的实际情况选择使用类或者结构。16.2.2 接口中的索引器 同类和结构一样,接口中也可以定义索引器。在进行建模设计时,可以通过在接口中定义索引器的办法,使得继承该接口

18、的类都必须提供相应的索引器。下面的实例演示了在接口中定义索引器的办法: public interface IMyInterface int thisint index get; set; 如此便在接在IMyInterface中定义了一个索引器。下面对前文中的班级学生实例进行修改,定义一个IClass接口,在接口中定义索引器,使得Class类实现IClass中的定义。将前文实例中Class类的实现代码替换为如下代码即可: / /IClass接口 / interface IClass / /索引器 / /索引 /相应学生 Student thisint i get; set; / /班级类的简单实

19、现 / class C1ass:IClass / /班级类的构造函数/ /班级名称 public Class(string name) /初始化相应的参数 m_name = name; for(int i=0;i10; i+) studentsi=new Student(iToString(),i); ) / /班级名称字段 / private string m_name; / /所有学生的集合 / private Student students=new Student10; / /班级名称属性 / public string Name get return m_name; ) set m_

20、name=value; ) ) / /班级的索引器,用于访问班级的学生 / /索引 /相应的学生对象 public Student thisint i get return studentsi; Set Studentsi=value ; ) ) )可以看到,在接口中使用索引器也非常简单。16.2.3 小结 本章介绍了C#中的一个重要功能,即索引器。索引器和委托都是C#中与其他语言不同的地方,有其他编程语言经验的读者可能对此不太熟悉。但正是这些不同之处在学习时需要重点掌握。索引器的合理使用可以给编程带来很大的方便,相信通过本章的学习读者已经感受到了这种方便。希望读者能熟练掌握C#的这些独特知识点。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2