写点什么

C#索引器的实现,黑马程序员 Java 基础入门

用户头像
Geek_f90455
关注
发布于: 1 小时前

如何声明索引器?


========


索引器提供了一种特殊的方法,来对类或结构体中的对象进行赋值和访问,要在类或结构上声明索引器,需要使用 this 关键字,索引器的定义格式如下:



[修饰符] 数据类型 this[索引类型 index]
{
??? get{//获得属性的代码}?????????????????????????????????????????????????
??? set{?//设置属性的代码}
}
复制代码


其中修饰符包括:public,protected,private,internal,new,virtual,sealed,override,abstract,extern.


数据类型是表示将要存取的数组或集合元素的类型,如 string、int 等。


this 关键字引用当前类的实例,从中可以看到,对索引器和对普通属性一样,为它提供 set 和 get 访问器,这些访问器指定使用该索引器时将引用什么内部成员。


索引器类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数同时也可以是字符串。


索引器和属性的异同对比


===========


在定义上,索引器和属性相似,具有如下的相似点:


  • 它们都属于函数成员,都不用分配内存来存储。

  • 它们都主要用来被访问其他数据成员,与这些数据成员相关联,并且为这些成员提供获取和设置访问。


索引器和属性的区别如下:


  • 属性允许调用方法,如同它们是公共数据字段,索引器允许调用对象的方法,如同对象是一个数组。

  • 属性可以通过简单的名称进行访问,索引器可以通过索引器进行访问。

  • 属性可以作为静态成员或实例成员,索引器必须作为实例成员。

  • 属性的 get 访问器没有参数,索引器的 get 访问器具有和索引器相同的形参表。

  • 属性的 set 访问器包含隐藏 value 参数,索引器的 set 访问器除了 value 参数外,还具有和索引器相同的形参表。


索引器实例分析


=======


比如下面这个程序,


定义一个课程类 Couse,在该类中定义三个私有成员 Chinese、English、Math,通过索引函数访问该类的私有成员,并对这三个私有成员进行读写操作。


首先是定义 Couse 类,并在该类中实现索引器:



//定义类Couse
class?Couse
{
//定义私有成员变量
????????private?float?Chinese;
????????private?float?English;
????????private?float?Math;


//定义索引器,该索引器的修饰符是public,数据类型是float,索引类型是string
????????public?float?this[string?name]
????????{
//定义get方法对成员进行读取
????????????get
????????????{
????????????????switch?(name)
????????????????{
????????????????????case?"语文":
????????????????????????return?Chinese;?????????????????????
????????????????????case?"英语":
????????????????????????return?English;???????????????????????
????????????????????case?"数学":
????????????????????????return?Math;??????
????????????????????default:
????????????????????????return?0;???????????????????


????????????????}
????????????}


//定义set方法对成员进行写入
????????????set
????????????{
????????????????switch?(name)
????????????????{
????????????????????case?"语文":
????????????????????????Chinese = value;
????????????????????????break;
????????????????????case?"英语":
????????????????????????English = value;
????????????????????????break;
????????????????????case?"数学":
????????????????????????Math = value;
????????????????????????break;


????????????????}
????????????}

## 一线互联网大厂Java核心面试题库
![image](https://static001.geekbang.org/infoq/6a/6aaaf060df94c0bb528370ee288e644f.png)
正逢面试跳槽季,给大家整理了大厂问到的一些面试真题,由于文章长度限制,只给大家展示了部分题目,更多Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等...已整理上传在**我的[腾讯文档【一线互联网大厂Java核心面试题库】点击即可领取](https://gitee.com/vip204888/java-p7)**,并会持续更新...感兴趣的朋友可以看看支持一波!
复制代码


用户头像

Geek_f90455

关注

还未添加个人签名 2021.07.06 加入

还未添加个人简介

评论

发布
暂无评论
C#索引器的实现,黑马程序员Java基础入门