C#索引器的实现、索引器和属性的异同对比,这些技能你get到了嘛?
Hello!大家好,我是努力赚钱买生发水的灰小猿!
最近在用C#做开发的时候要用到索引函数,所以今天就在这里和小伙伴记录一下C#中索引器的实现。
什么是索引器?
在C#中,索引器允许类或结构的实例按照和数组相同的方式进行索引,索引器类似于属性,不同之处在于他们的访问采用参数,而实际上,索引器提供了一种访问类或结构的方法,即允许按照和类、结构或接口相同的方式进行索引,它的引入的目的是为了让程序更加的直观便于理解。
如何声明索引器?
索引器提供了一种特殊的方法,来对类或结构体中的对象进行赋值和访问,要在类或结构上声明索引器,需要使用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;
}
}
}
}
在主类中调用Couse类和索引器,对成员变量进行读写:
class Program
{
static void Main(string[] args)
{
//新建一个对象接收Couse类
Couse couse = new Couse();
couse["语文"] = 100; //通过“语文”索引对Chinese进行赋值
couse["英语"] = 99; //通过“英语”索引对English进行赋值
couse["数学"] = 98; //通过“数学”索引对Math进行赋值
//通过相应的索引获取到成员的值并输出
Console.WriteLine("语文:" + couse["语文"]);
Console.WriteLine("英语:" + couse["英语"]);
Console.WriteLine("数学:" + couse["数学"]);
}
}
运行结果如下:
在上述程序中首先在定义Couse类并在其中设置索引器,之后在主方法中调用该类,并通过索引对成员变量进行赋值,之后再通过索引对相应的成员变量进行调用。
好了,内容不多也好理解。
觉得不错记得点赞关注大灰狼哟!
- 微信最新自定义菜单事件
- 微信JSSDK分享到朋友圈和朋友自定义内容功能实现
- 无线安全渗透测试套件WiFi-Pumpkin新版本发布
- Java使用QQ邮箱给其他邮箱发邮件
- 从wireshark抓包开始学习https
- 用于时间序列预测的Python环境
- Pandoc安装实现Markdown转PDF (CentOS6)
- String类replaceAll方法正则替换深入分析
- 微信硬件平台对接--蓝牙
- 初试git+github(linux环境)
- Raspberry PI Nginx 安装
- 微信支付-Java-SpringMVC基础一些代码支持
- 使用Kafka的High Level Consumer
- 微信公众号发送模板消息 Java实现。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 聊聊原型 Prototype | 技术创作101训练营
- Excelize 2.3.1 发布,Go 语言 Excel 文档基础库,支持加密表格文档
- PUMA560机器人工具箱运动控制A:路径规划-运动学
- Android 3分钟带你入门开发测试
- Spring Boot 知识清单(一)SpringApplication
- Linux下的IO监控与分析
- pytorch+Unet图像分割:将图片中的盐体找出来
- html 用浏览器打开中文乱码解决方法
- SQLServer 数据库字符集、版本号sql语句查询语法
- chrome 浏览器自保留端口、安全端口有哪些?chrome不能访问某个端口的环境网址,但是其它的浏览器可以访问原因及解决办法。
- MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
- MobaXterm工具连接Linux服务器入门使用手册,国产化泰山服务器连接工具使用演示
- Linux 服务器配置信息查询方法,国产化申威服务器配置信息查看演示
- 达梦数据库、oracle数据库如何判断指定表有没有建立索引?对应的表有没有索引查询方法
- Linux服务器运行sh文件提示权限不够解决方法?飞腾服务器Permission denied问题授权方法