📅  最后修改于: 2023-12-03 15:13:52.639000             🧑  作者: Mango
在 C# 中,索引运算符[]
用于访问数组、列表、字典等以及自定义类型中的索引元素。在某些情况下,我们需要自定义索引运算符以提供更多功能,比如通过一个类的实例访问其内部数据结构的元素。这时,我们就可以使用 C# 覆盖索引运算符。
在 C# 中,可以通过重载索引器 this
来实现自定义索引运算符。
下面是一个简单的示例,演示如何在您自己的类中使用 C# 覆盖索引运算符。该类实现一个简单的字符串列表,并允许我们使用 []
运算符来访问其元素:
public class MyList
{
private string[] list = new string[10];
public string this[int i]
{
get { return list[i]; }
set { list[i] = value; }
}
}
代码说明:
MyList
的类;string[] list
,用于存储字符串列表;this
的索引器,接受一个整数作为输入,以使我们能够访问列表中的元素;当我们实例化 MyList
类并使用索引运算符访问其元素时,将自动调用上述属性的 getters 和 setters 方法。
MyList list = new MyList();
list[0] = "hello";
list[1] = "world";
Console.WriteLine(list[0]); // 输出 "hello"
Console.WriteLine(list[1]); // 输出 "world"
如果您需要在自己的 C# 类中实现具有多维索引的索引器,那么以下示例应该能够帮助您完成这项任务:
public class Matrix
{
private int[,] matrix = new int[3, 3];
public int this[int i, int j]
{
get { return matrix[i, j]; }
set { matrix[i, j] = value; }
}
}
代码说明:
Matrix
的类;int[,]
类型的二维数组 matrix
;i
和 j
作为参数的索引器;Matrix matrix = new Matrix();
matrix[0, 0] = 1;
matrix[0, 1] = 2;
matrix[1, 0] = 3;
matrix[1, 1] = 4;
Console.WriteLine(matrix[0, 0]); // 输出1
Console.WriteLine(matrix[0, 1]); // 输出2
Console.WriteLine(matrix[1, 0]); // 输出3
Console.WriteLine(matrix[1, 1]); // 输出4
在本文中,我们已经看到了如何在 C# 中实现自定义索引器,以覆盖基础索引运算符。通过使用覆盖索引器,我们可以扩展自定义类型以支持访问其内部数据结构中的元素。