跳到主要内容

C# 索引器

在C#中,索引器(Indexer)是一种特殊的成员,它允许类的实例像数组一样被索引。通过索引器,你可以使用类似于数组的语法来访问类或结构中的元素。索引器通常用于封装集合或类似数组的数据结构。

什么是索引器?

索引器是一种允许对象通过索引访问其内部数据的成员。它类似于属性,但使用方括号 [] 而不是点 . 来访问。索引器可以有一个或多个参数,这些参数用于指定要访问的元素。

索引器的语法

索引器的语法如下:

csharp
public returnType this[parameterType parameter]
{
get
{
// 返回指定索引的值
}
set
{
// 设置指定索引的值
}
}
  • returnType:索引器返回的类型。
  • parameterType:索引参数的类型。
  • parameter:索引参数。

索引器的示例

让我们通过一个简单的示例来理解索引器的工作原理。假设我们有一个类 MyCollection,它内部存储了一个整数数组。我们可以使用索引器来访问这个数组中的元素。

csharp
class MyCollection
{
private int[] arr = new int[10];

// 索引器
public int this[int index]
{
get
{
return arr[index];
}
set
{
arr[index] = value;
}
}
}

在这个示例中,MyCollection 类定义了一个索引器,允许我们通过 [] 访问内部的 arr 数组。

使用索引器

现在,我们可以像使用数组一样使用 MyCollection 类的实例:

csharp
MyCollection collection = new MyCollection();
collection[0] = 10; // 设置第一个元素
int value = collection[0]; // 获取第一个元素
Console.WriteLine(value); // 输出: 10

多参数索引器

索引器不仅可以接受一个参数,还可以接受多个参数。这在处理多维数组或类似数据结构时非常有用。

csharp
class Matrix
{
private int[,] matrix = new int[3, 3];

// 多参数索引器
public int this[int row, int col]
{
get
{
return matrix[row, col];
}
set
{
matrix[row, col] = value;
}
}
}

在这个示例中,Matrix 类定义了一个接受两个参数的索引器,允许我们访问二维数组中的元素。

使用多参数索引器

csharp
Matrix mat = new Matrix();
mat[0, 0] = 1; // 设置第一行第一列的元素
int value = mat[0, 0]; // 获取第一行第一列的元素
Console.WriteLine(value); // 输出: 1

实际应用场景

索引器在许多实际应用场景中非常有用。例如,假设你正在开发一个游戏,其中有一个 Inventory 类来管理玩家的物品。你可以使用索引器来访问玩家的物品列表。

csharp
class Inventory
{
private string[] items = new string[10];

// 索引器
public string this[int index]
{
get
{
return items[index];
}
set
{
items[index] = value;
}
}
}

在这个示例中,Inventory 类使用索引器来管理玩家的物品列表。你可以通过索引器轻松地添加或获取物品。

csharp
Inventory inventory = new Inventory();
inventory[0] = "Sword"; // 添加物品
string item = inventory[0]; // 获取物品
Console.WriteLine(item); // 输出: Sword

总结

索引器是C#中一个强大的特性,它允许你像访问数组一样访问类或结构中的元素。通过索引器,你可以封装集合或类似数组的数据结构,并提供一种简洁的方式来访问它们。

附加资源

练习

  1. 创建一个 StringCollection 类,使用索引器来存储和访问字符串列表。
  2. 修改 Matrix 类,使其支持三维数组的索引器。
  3. 尝试在 Inventory 类中添加一个方法,用于查找特定物品的索引。

通过这些练习,你将更好地理解索引器的使用场景和实现方式。