在 C# 中,索引器(Indexer)是一种特殊的属性,允许类的实例像数组一样通过索引访问。索引器使得可以定义类似于数组的访问方式,但是访问的对象可以是类的实例,而不仅限于数组。
索引器允许通过类实例的索引来访问该类的实例成员。它的声明类似于属性,但具有参数。通常情况下,索引器用于允许类的实例像数组一样通过索引进行访问。
索引器的语法如下所示:
public class MyClass
{
// 声明一个索引器
public returnType this[indexType index]
{
get
{
// 返回索引位置的值
}
set
{
// 设置索引位置的值
}
}
}
下面通过一个简单的示例来演示如何定义和使用索引器。
首先,我们定义一个名为MyCollection的类,包含一个私有的数组和一个索引器。
public class MyCollection
{
private int[] items = new int[10];
public int this[int index]
{
get
{
if (index >= 0 && index < items.Length)
{
return items[index];
}
else
{
throw new ArgumentOutOfRangeException("index");
}
}
set
{
if (index >= 0 && index < items.Length)
{
items[index] = value;
}
else
{
throw new ArgumentOutOfRangeException("index");
}
}
}
}
接下来,我们创建MyCollection类的实例,并通过索引器访问和修改内部数组元素。
class Program
{
static void Main(string[] args)
{
MyCollection collection = new MyCollection();
// 通过索引器设置元素值
collection[0] = 1;
collection[1] = 2;
collection[2] = 3;
// 通过索引器获取元素值
for (int i = 0; i < 3; i++)
{
Console.WriteLine(collection[i]);
}
}
}
运行程序,输出结果如下:
1
2
3
C#索引器可以支持多维索引,如下所示:
public class Matrix
{
private int[,] items = new int[3, 3];
public int this[int row, int col]
{
get
{
if (row >= 0 && row < 3 && col >= 0 && col < 3)
{
return items[row, col];
}
else
{
throw new ArgumentOutOfRangeException("row or col");
}
}
set
{
if (row >= 0 && row < 3 && col >= 0 && col < 3)
{
items[row, col] = value;
}
else
{
throw new ArgumentOutOfRangeException("row or col");
}
}
}
}
C#允许对索引器进行重载,如下所示:
public class MyCollection
{
private int[] items = new int[10];
private string[] strings = new string[10];
public int this[int index]
{
get
{
// ...
}
set
{
// ...
}
}
public string this[string key]
{
get
{
// ...
}
set
{
// ...
}
}
}
索引器是 C# 中一个强大且灵活的特性,允许类的实例像数组一样通过索引来访问。它提供了一种简洁、直观的方式来管理类的实例数据,特别适用于需要按照索引方式进行访问和修改的场景。
通过本文的介绍和示例,希望读者能够理解并掌握 C# 中索引器的使用方法和基本原理,从而能够在实际项目中灵活运用。