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

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-22 18:58:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-22 18:58:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-22 18:58:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-22 18:58:01       18 阅读

热门阅读

  1. 大模型镜像打包实战:CodeGeeX2为例

    2024-01-22 18:58:01       39 阅读
  2. ansible-设置互信

    2024-01-22 18:58:01       26 阅读
  3. web搭建和nfs

    2024-01-22 18:58:01       37 阅读
  4. 前端上传图片至OSS

    2024-01-22 18:58:01       35 阅读
  5. 网络安全事件分级指南

    2024-01-22 18:58:01       34 阅读
  6. Leetcode 3016. Minimum Number of Pushes to Type Word II

    2024-01-22 18:58:01       36 阅读
  7. ABAP - OOALV DEMO 杂乱无用的笔记

    2024-01-22 18:58:01       31 阅读