在C#中,自定义索引(Custom Indexers)是指允许对象像数组一样,通过索引访问其中的元素。自定义索引器为类、结构或接口提供了类似数组的语法,但其行为和存储方式可以根据需要自定义。
自定义索引器的定义
索引器的定义类似于属性(Property),但使用 this
关键字来定义,并且接受一个或多个参数来表示索引。其语法如下:
public class MyClass
{
private Dictionary<int, string> _data = new Dictionary<int, string>();
public string this[int index]
{
get
{
if (_data.ContainsKey(index))
{
return _data[index];
}
else
{
return "Index out of range";
}
}
set
{
_data[index] = value;
}
}
}
使用索引器
定义了索引器后,就可以像访问数组那样来访问对象的元素了
MyClass myObject = new MyClass();
myObject[0] = "Hello";
myObject[1] = "World";
Console.WriteLine(myObject[0]); // 输出 "Hello"
Console.WriteLine(myObject[1]); // 输出 "World"
多参数索引器
索引器不仅可以接受一个参数,还可以接受多个参数
public class Matrix
{
private int[,] _matrix = new int[10, 10];
public int this[int row, int col]
{
get { return _matrix[row, col]; }
set { _matrix[row, col] = value; }
}
}
使用时,可以传入两个参数来访问矩阵的元素:
Matrix matrix = new Matrix();
matrix[0, 0] = 1;
matrix[1, 2] = 5;
Console.WriteLine(matrix[0, 0]); // 输出 "1"
Console.WriteLine(matrix[1, 2]); // 输出 "5"
-
访问修饰符:索引器可以有
get
和set
访问器,也可以选择性地实现只读或只写索引器。 - 索引类型:索引器的参数可以是任意类型,不一定是整数。你可以定义字符串、枚举或其他类型的索引。
- 多个索引器:同一个类可以定义多个索引器,但它们的参数列表必须不同(即必须有不同的签名)。
索引器非常适合用于类内部表示数据集合的情况,例如数组、列表或字典。在这些情况下,索引器使得代码更加简洁和直观。