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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gitee Reward让开源作者不再为爱发电

一、什么是Gitee Reward&#xff1f; Gitee Reward是Gitee为改善开源开发生命周期提出的新策略。开源项目的支持者们可以更轻松地为其喜爱的项目提供资金&#xff0c;贡献者们也可以因为其不懈的开源贡献得到奖励。 二、Gitee Reward上允许哪些类型的项目&#xff1f; 允许任…

stable diffuison的安装和使用

stable diffuison的安装和使用 简单介绍 Stable Diffusion是一个深度学习文本到图像的生成模型&#xff0c;它可以根据文本描述生成详细的图像。这个模型主要应用于文本生成图像的场景中&#xff0c;通过给定的文本提示词&#xff0c;模型会输出一张与提示词相匹配的图片。 S…

Cadence——布局部分相关教程

本文章基于【凡亿】Cadence Allegro 17.4零基础入门66讲PCB Layout设计实战加个人理解写出 &#xff08;一&#xff09;中英文切换 注意&#xff1a;只是将选项卡部分切换中文 1&#xff0c;设置中文 a,打开PCB Editor 17.4以后&#xff0c;点击Help和About b,可以看到与下…

服务器或服务器主板中的BIOS更新详解

BIOS更新总共有三种方式&#xff1a;DOS、UEFI Shell以及BMC网页更新&#xff0c;而其中&#xff0c;DOS与Shell的更新方式类似&#xff0c;因此以下为统一描述。 一、UEFI Shell或DOS下更新 当我们下载了官网的BIOS更新包并解压后可以获得一些更新文件&#xff0c;在更新文件…

Python基础第七篇(Python的文件操作)

文章目录 一、文件编码二、文件的读取操作1.操作代码2.读出结果 三、文件的写出操作1.源代码2.读出结果 四、文件的追加操作1.源代码2.读出结果 这篇文章旨在深入浅出地介绍Python在文件操作上的能力&#xff0c;包括文件的编码、读取和写入等基本操作。内容丰富、易于理解&…

公网环境调试本地配置的Java支付宝沙箱环境模拟支付场景

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境…

java SSM项目预算生成管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM项目预算生成管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的 源代码和数据库&#xff0c;系统主…

浅析Java虚拟机中的ZGC

引言 为什么需要垃圾回收&#xff08;Garbage Collection&#xff09; 垃圾回收是Java开发中的关键机制&#xff0c;负责自动管理内存&#xff0c;防止内存泄漏&#xff0c;提高开发效率和应用程序的稳定性。 Java中主要的垃圾回收方法 标记-清除算法&#xff08;Mark and …

暴力破解常见的服务器

目录 使用 pydictor 生成自己的字典工具liunx下载使用常用的参数说明插件型字典 (可自己根据 API 文档开发) 使用 hydra 工具在线破解系统用户密码使用 hydra 破解 windows 7 远程桌面密码使用 hydra 工具破解 ssh 服务 root 用户密码 使用 Medusa 工具在线破解medusa参数说明M…

jquery学习-1

jquery学习-1 1.jquery类似的框架 MooTools 对比反应时间2.Jquery Api jquery api中文文档 jquery注重的是看文档 3.Jquery下载和导入(压缩版) Jquery 下载 下载后导入项目中进行使用 <!DOCTYPE html> <html><head><meta charset"utf-8"…

埋点自动化测试框架设计

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大数据时代&#xff0c;多数的web或app产品都会使用第三方或自己…

SpringCloud Alibaba 深入源码 - Nacos 分级存储模型、支撑百万服务注册压力、解决并发读写问题(CopyOnWrite)

目录 一、SpringCloudAlibaba 源码分析 1.1、SpringCloud & SpringCloudAlibaba 常用组件 1.2、Nacos的服务注册表结构是怎样的&#xff1f; 1.2.1、Nacos的分级存储模型&#xff08;理论层&#xff09; 1.2.2、Nacos 源码启动&#xff08;准备工作&#xff09; 1.2.…

HubSpot SEO功能好用吗?

HubSpot对于SEO&#xff08;搜索引擎优化&#xff09;提供了全面的工具和功能&#xff0c;帮助用户优化其网站以在搜索引擎中取得更好的排名。以下是关于HubSpot SEO的一些关键方面&#xff1a; 内容优化&#xff1a; HubSpot的内容工具允许用户创建并优化吸引人的内容。通过关…

激光雷达标定入门(5)Docker网络配置

1 前言 这一步是对之前专栏中一键安装介绍的一点扩展&#xff0c;是因为在后续的部署中&#xff0c;特别是雷达的驱动中&#xff0c;发现在docker的容器中无法接到雷达的数据&#xff0c;但是在容器外功能包能正常收到雷达的信号&#xff0c;后面发现是容器的IP没有在雷达的IP…

最新阿里云免费SSL证书申请使用介绍

为网站部署SSL证书已经是现在站长的必须要做的工作&#xff0c;然而SSL证书并不全是免费的&#xff0c;免费且好用的资源也越来越有限&#xff0c;毕竟嘛&#xff0c;这些都需要成本。 PS&#xff1a;最下方有最终建议方案。 本文介绍当前(2024年)阿里云免费SSL证书信息。 阿…

二极管解读:封装与外观、参数意义、发展历史与未来趋势

在电子技术不断进步的今天&#xff0c;二极管这一基础元件的作用不断扩大&#xff0c;其性能及应用成为电子设计师和爱好者们讨论的热门话题。本文将从四个角度为您解读二极管的世界&#xff1a;封装和外观特征、参数及其重要意义、发展历史&#xff0c;以及未来技术发展趋势。…

Vue3使用

1、列表实现 <el-table :data"tableData" border style"width: 100%" selection-change"handleSelectionChange" :header-cell-style"{text-align:center}"><el-table-column type"selection" width"55"…

【注解】@RequiredArgsConstructor 按需自动生成构造函数,举例说明

RequiredArgsConstructor 是Lombok库中的一种注解&#xff0c;它用于自动生成构造函数&#xff0c;针对于final字段的构造函数。它的作用包括以下几点&#xff1a; 自动生成构造函数&#xff1a;RequiredArgsConstructor 注解自动生成一个构造函数&#xff0c;该构造函数接受标…

以太坊账户地址与比特B地址生成方法对比

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 以太坊和比特B地址在生成方…

17.JVM-[一篇通]

文章目录 JVM1.JVM 简介 (一个进程有一个JVM)1.1JVM 发展史1.2 JVM 和《Java虚拟机规范》 2.JVM 运行流程2.1JVM 执行流程 3.JVM 运行时数据区3.1 堆&#xff08;线程共享 一个进程只有一份堆&#xff09;3.2Java虚拟机栈&#xff08;线程私有 每个线程都有一份属于自己的栈&am…