📜  c# 覆盖索引运算符 - C# (1)

📅  最后修改于: 2023-12-03 15:13:52.639000             🧑  作者: Mango

C# 覆盖索引运算符

在 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 的索引器,接受一个整数作为输入,以使我们能够访问列表中的元素;
  • 实现了 getters 和 setters 来获取和设置列表中元素的值。

当我们实例化 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
  • 定义了使用两个整数 ij 作为参数的索引器;
  • 实现了 getters 和 setters,以允许我们获取和设置基础数组中指定的元素。
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# 中实现自定义索引器,以覆盖基础索引运算符。通过使用覆盖索引器,我们可以扩展自定义类型以支持访问其内部数据结构中的元素。