C#教学第16讲索引器2(学习笔记)

本篇详细介绍了C#中的索引器概念,包括其与数组的区别、索引器的重载特性以及如何使用多参数索引器进行数据查询。通过具体案例展示了索引器在实际开发中的应用。
第16讲索引器2

  视频讲师:陈广老师

  大家好,今天我们接着上节课的内容继续讲解。首先先把上节课的内容做一个回顾和总结。

索引器与数组的比较

・索引器的索引值(Index)类型不受限为整数

  用来访问数组的索引值(Index),其类型一定为整数,然而索引器可以定义其他类型的索引值。比如上节课我们使用了字符串的类型,来作为它的索引值。

・索引器允许重载(Overloading)

  一个类并不限制只能够定义一个索引器,只要索引器的函数签名不同,一个类就可以拥有很多个索引器,你可以重载它的功能。

・索引器不是一个变量

  索引和数组不同的地方在于,索引器并没有直接对应应用数据存储的地方。索引器有get访问器和set访问器,用来指明要读取或写入索引器元素时,需要执行的代码。

  我们先来了解一下数组,如图:

c#

 

  声明一个数组int[] a,它首先会在堆栈中存放一个a的指针,当然现在这个指针还是空的。接下来new int[3]初始化这个数组并把它的长度设为3。由于数组是一个引用类型,所以new int[3]会在托管堆中开辟一块内存空间,每个整数所占的字节是4个字节,所以这段内存空间的长度就是4×3等于12个字节的空间。然后把这段内存的地址赋给a,接下来给a[0]a[1]a[2]赋值1,2,3。这3个整数就存放在托管堆里面,他们依次存放在刚才所开辟的那段内存空间里面。

  接下来我们来看下类数组的存放,如图:

C#

 

  首先声明了一个类ArrClass,接下来声明了一个ArrClass数组a,这样就在堆栈中开辟了一个内存空间来存放a,new ArrClass[3]初始化并设置长度为3。这个操作使得在托管堆中开辟了一片内存空间,而这个内存空间的长度就等于3个指针的大小,这3个指针是用来指向ArrClass实例的。接下来a[0]=new ArrClass()这个操作会在托管堆中ArrClass的实例,然后赋给a[0]。也就是把ArrClass实例的这个指针存放在先前new ArrClass[3]所开辟的空间里面,这个位置指向的就是a[0]。下面的a[1]a[2]操作也是如此。

  刚才我们讲解了数组的存放,下面我们来看下索引器。

  索引器并没有直接对应应用数据存储的地方。索引器有get访问器和set访问器,用来指明要读取或写入索引器元素时,需要执行的代码。

  我们来看下上节课的例子:

我们这个索引器,它的数据实际上是存放在Hashtable里面的,当然我们也可以存放在数组或者ArrayList等等这些地方。其实呢Hashtable本身就是一个索引器,我们来看name[index]它的访问也需要中括号,我们可以把索引器这个中括号理解为重载了数组的中括号。索引器在读取或者写入数据的时候,它不是直接的写而是要通过代码,上面的get和set中的代码分别执行了读取和写入。而这些读取和写入操作都是针对于Hashtable的实例name来进行的。也就是说数据并不存放在索引器里,而是存放在类的一个Hashtable或者ArrayList或者其他等等。

 

  索引器又被称为一种有参属性,他们都实现了get访问器和set访问器,但是它们又有所不同。下面我们来讲讲它们的区别:

・标识方式:属性以名称来标识;索引器则以函数签名来标识。

・索引器可以被重载:因为属性是以名称标识的,所以不能被重载;索引器是用函数签名标识的,因此可以重载。

・索引器不可以声明为static:属性可以为static,而索引器永远属于实例成员,不能为static。

 

  前面讲的比较罗嗦,但是对初学者还是有所帮助的。

  索引器还有一个地方没有讲,那就是可以使用多个参数来访问。下面我们来演示一下。

我们运行代码,通过编译执行后在屏幕上显示了张三他2这个课程的分数80。没有问题,这时候可能有人会问了,可不可以查找张三所有课程的成绩呢,这个没有什么问题,用我们上节课学的知识重载。

运行程序,效果如下:

C#16

 

运行成功,把张三所有的信息都显示出来了。

  这节课我们讲了多参索引,然后又回顾了一下索引器的重载。好,这节课我们就讲到这里。

由快乐乔巴听课摘写笔记

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值