本文介绍: 工业软件首先要求高可靠性、高可维护性。作为工业软件的开发者,我们对语言重载的需求是:“不可或缺”。没有重载几乎就无法开展大规模的工业软件编程项目,因而很难想象怎么用 Go 或 python 或者 javascript 编写高可靠性的应用程序。作为前端码农、学生或实验室编程者,你可能无法理解这一点。而C# 的重载尤其优雅,其中的索引器(this)重载、运算符重载是以科学计算为核心的工程项目中大量使用的程序技术。请阅读下面 this 的定义:/// <summary>//

上一篇:

 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

原文地址:https://blog.csdn.net/beijinghorn/article/details/124204317

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_60498.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注