上一篇:
?C#,入门教程(23)——数据类型转换的一点基础知识https://blog.csdn.net/beijinghorn/article/details/124187182
工业软件首先要求高可靠性、高可维护性。
作为工业软件的开发者,我们对语言重载的需求是:“不可或缺”。
没有重载几乎就无法开展大规模的工业软件编程项目,因而很难想象怎么用 Go 或 python 或者 javascript 编写高可靠性的应用程序。
而C# 的重载尤其优雅,其中的索引器(this)重载、运算符重载是以科学计算为核心的工程项目中大量使用的程序技术。
索引器是一组get和set的访问器,与属性类似。
(1)索引器不用分配内存来存储
(2)主要用来访问其他数据成员,并为他们提供获取和设置的方法。
以下一段文字来自于:
草原上唱山歌:索引器的详细讲解(C#)https://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)你会吗?看多图演示,学真正注释。https://blog.csdn.net/beijinghorn/article/details/124681888