当前位置: 首页 > news >正文

C#,入门教程(24)——类索引器(this)的基础知识

上一篇:

 C#,入门教程(23)——数据类型转换的一点基础知识icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124187182

工业软件首先要求高可靠性、高可维护性。

作为工业软件的开发者,我们对语言重载的需求是:“不可或缺”。

没有重载几乎就无法开展大规模的工业软件编程项目,因而很难想象怎么用 Go 或 python 或者 javascript 编写高可靠性的应用程序。

而C# 的重载尤其优雅,其中的索引器(this)重载、运算符重载是以科学计算为核心的工程项目中大量使用的程序技术。

索引器是一组get和set的访问器,与属性类似。
(1)索引器不用分配内存来存储
(2)主要用来访问其他数据成员,并为他们提供获取和设置的方法。

以下一段文字来自于:

草原上唱山歌:索引器的详细讲解(C#)icon-default.png?t=N7T8https://blog.csdn.net/shanniuliqingming/article/details/123775693

索引器与属性很类似。索引器的创建与属性创建所使用的编程语言特性是一样的。索引器使属性被索引:使用一个或多个参数引用的属性,这些参数为某些值集合提供索引。

创建索引器的必备要素:

(1)必须先创建索引器所需要的容器(可以理解为数据的存放);
(2)创建索引器需要使用this关键字;
(3)索引器中必须包含get和set访问器,在C# 7.0后可以使用表达式(=>)主体进行简化;
(4)在使用表达式主体成员进行索引时,必须额外的提供容器的修改接口(因为表达式主体不包括set访问器)。

索引器相当于一个方法,支持多个或多种类型的参数,与方法不同的是,索引器没有独立的名称,只能通过返回值的不同和参数的不同来区分不同的签名(从而实现重载),其返回值不能为void。索引器除了可以传入参数外,还可以对其进行赋值。
创建索引器时,其返回值为value关键字所使用的类型,定义了返回值类型的同时,也定义了其可接受的值类型。
总之,我对索引器的理解就是:是一个可以进行读写操作的自定义类中数据集合的接口。通过该接口,简化或丰富了该自定义类中数据集合的操作方式。

索引器总结:

(1)使用索引器可以类似于数组的方式为对象建立索引;
(2)get取函数返回值,set取函数分配值;
(3)this(代表当前类)关键字用于定义索引器;
(4)value关键字用于定义set索引器所赋予的值;
(5)索引器不必根据整数值进行索引,自行决定如何定义特定的查找机制;
(6)索引器可以被重载;
(7)索引器可以有多个形参,例如对二维数组的访问。
 

请阅读下面 this 的定义:

/// <summary>
/// 数独板(Sudoku Board)信息类
/// </summary>
public class Board
{/// <summary>/// 数字总数(N=M*M)/// </summary>public int N { get; set; } = 9;/// <summary>/// 小格子行列数/// </summary>public int M { get; set; } = 3;/// <summary>/// 所有节点(保存数字)/// </summary>public int[,] nodes { get; set; } = null;public Board(int n){N = n;M = (int)Math.Sqrt(N);nodes = new int[N, N];Clear();}/// <summary>/// 提取i,j节点的数字/// </summary>/// <param name="i"></param>/// <param name="j"></param>/// <returns></returns>public int this[int i, int j]{set{nodes[i, j] = value;}get{return nodes[i, j];}}/// <summary>/// 清除(重置)/// </summary>public void Clear(){for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){nodes[i, j] = 0;}}}
}

使用起来就非常舒服了。

Board x = new Board(9);//获取第一个位置的数字;
int firstNumber = x[0,0];

 ——————————————————————

POWER BY 315SOFT.COM &
TRUFFER.CN

下一篇:

C#,入门教程(25)——注释(Comments)你会吗?看多图演示,学真正注释。icon-default.png?t=N7T8https://blog.csdn.net/beijinghorn/article/details/124681888

相关文章:

  • OPENGL光线追踪
  • Kafka-服务端-DelayedOperationPurgatory
  • docker:Java通过nginx获取客户端的真实ip地址
  • 【云原生之kubernetes实战】在k8s环境下部署Mikochi文件管理工具
  • 【STM32调试】寄存器调试不良问题记录持续版
  • etcd安装
  • Idea 开发环境不断切换git代码分支导致冲掉别人代码
  • 运用分布式锁 redisson
  • 第十五章 : Spring Cloud全链路监控(Pinpoint实战)
  • Docker(二)安装指南:主要介绍在 Linux 、Windows 10 和 macOS 上的安装
  • 准备的一些爬虫面试题
  • 《WebKit 技术内幕》学习之七(2): 渲染基础
  • IPv6自动隧道---6to4中继
  • 【隧道篇 / SSL】(7.4) ❀ 01. 只允许国内IP通过SSL VPN访问内网 ❀ FortiGate 防火墙
  • 开发者广告变现对接广告平台,广告瀑布流是什么?
  • 【前端学习】-粗谈选择器
  • CSS实用技巧
  • Flannel解读
  • javascript数组去重/查找/插入/删除
  • Java程序员幽默爆笑锦集
  • Linux Process Manage
  • Spring Cloud Feign的两种使用姿势
  • TypeScript迭代器
  • webpack4 一点通
  • web标准化(下)
  • 技术:超级实用的电脑小技巧
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 爬虫模拟登陆 SegmentFault
  • 驱动程序原理
  • 使用 QuickBI 搭建酷炫可视化分析
  • 异步
  • 原生JS动态加载JS、CSS文件及代码脚本
  • FaaS 的简单实践
  • puppet连载22:define用法
  • 阿里云服务器如何修改远程端口?
  • ​2020 年大前端技术趋势解读
  • ​flutter 代码混淆
  • #define,static,const,三种常量的区别
  • (10)ATF MMU转换表
  • (3)llvm ir转换过程
  • (arch)linux 转换文件编码格式
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (办公)springboot配置aop处理请求.
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (黑马C++)L06 重载与继承
  • (十)T检验-第一部分
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)c++ std::pair 与 std::make
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)详解PHP处理密码的几种方式
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ../depcomp: line 571: exec: g++: not found