 C# 索引器(Indexer)
C# 索引器(Indexer)
  索引器是一种特殊的属性,它允许使用类似于数组的语法来访问对象的元素。它实际上是一个方法,可以通过类的实例名称后跟方括号中的索引来访问它。
C# 中的索引器提供了一种方便的方法来访问和操作类中的元素,而不需要暴露类中的字段或属性。它们通常用于自定义集合类中,以允许使用类似于数组的语法来访问集合元素。
# C# 索引器(Indexer)语法
在 C# 中,索引器声明的语法如下所示:
access_modifier return_type this [ parameter_list ]
{
    // get and/or set accessor implementation
}
其中:
- access_modifier:表示索引器的访问修饰符,可以是 public、private、protected、internal 或 protected internal。
- return_type:表示索引器的返回类型,可以是任何有效的类型,包括 void。
- parameter_list:表示索引器的参数列表,可以包含一个或多个参数,每个参数都必须有一个类型和一个名称。
在索引器的访问器实现中,可以实现 get 访问器、set 访问器或两者都实现。它们的语法如下:
get
{
    // get accessor implementation
}
set
{
    // set accessor implementation
}
在 get 访问器中,可以通过返回值返回所需的元素。在 set 访问器中,可以使用 value 关键字来获取传递给访问器的值,并进行所需的操作。
# C# 索引器(Indexer)示例
以下是一个简单的示例,演示如何在 C# 中使用索引器访问对象的元素:
public class MyCollection
{
    private string[] items = new string[10];
    public string this[int index]
    {
        get { return items[index]; }
        set { items[index] = value; }
    }
}
class Program
{
    static void Main(string[] args)
    {
        MyCollection collection = new MyCollection();
        collection[0] = "Item 1";
        collection[1] = "Item 2";
        Console.WriteLine(collection[0]); // Output: Item 1
        Console.WriteLine(collection[1]); // Output: Item 2
    }
}
在上面的示例中,我们定义了一个名为 MyCollection 的类,它包含一个名为 items 的字符串数组。然后我们定义了一个名为 this[int index] 的索引器,它允许我们使用类似于数组的语法来访问和修改 items 数组中的元素。
在 Main 方法中,我们创建了一个 MyCollection 实例,并使用索引器向集合中添加了两个元素。然后我们使用索引器读取并输出集合中的元素。
# C# 索引器(Indexer)的注意事项
以下是一些在使用 C# 索引器时需要注意的事项:
- 索引器可以有多个参数,但它们的参数名必须不同。例如,this[int i, int j]是有效的,但this[int i, int i]是无效的。
- 索引器可以重载,就像普通的方法一样。例如,我们可以定义一个名为 this[string name]的索引器和一个名为this[int index]的索引器,它们都有不同的参数类型。
- 如果只实现 get 访问器,则索引器是只读的。如果只实现 set 访问器,则索引器是只写的。如果两者都实现,则索引器是可读写的。
- 索引器中的参数可以是 ref 或 out 类型。这使得我们可以在索引器内部修改参数的值,并在调用方的作用域内保留更改。
- 索引器中的参数可以是可变参数。这使得我们可以使用任意数量的索引来访问对象的元素。
# 结论
C# 索引器提供了一种方便的方法来访问和操作对象的元素,而不需要暴露类中的字段或属性。它们通常用于自定义集合类中,以允许使用类似于数组的语法来访问集合元素。在实现索引器时,需要注意参数的类型和访问器的实现方式,以确保正确地访问和操作对象的元素。
上次更新: 2023/09/13, 21:42:14
