📜  C#|索引器(1)

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

C# 索引器

简介

在 C# 中,索引器是一种特殊的属性,它允许对象实例被像数组一样索引。比如,我们可以通过 obj[i] 的方式来访问对象中的元素,这个 i 就是索引值。

索引器可以让我们方便地处理像列表、字典等集合数据类型,使得代码更加简洁、易读。

示例

下面是一个简单的示例,演示如何使用索引器来访问对象中的元素。

public class MyList
{
    private int[] data;  // 存放数据的数组

    public MyList()
    {
        data = new int[10];
    }

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

// 使用示例
MyList list = new MyList();
list[0] = 1;
list[1] = 2;
Console.WriteLine(list[0]);  // 输出 1
Console.WriteLine(list[1]);  // 输出 2

在上面的示例中,我们定义了一个名为 MyList 的类,其中包含了一个长度为 10 的数组。同时,我们定义了一个索引器 this[int index],通过 getset 方法来实现对数组元素的读写。

在 main 函数中,我们创建了一个 MyList 实例,并且可以通过索引器来访问其中的元素。

附加说明
索引器的参数

在实际使用中,我们可以定义多个参数的索引器。比如:

public int this[int x, int y]
{
    get { /*...*/ }
    set { /*...*/ }
}

这样我们就可以通过 obj[x,y] 的方式来访问对象中的元素。

索引器的类型

在 C# 6.0 及之前的版本中,索引器的类型必须是整数类型(int、long、byte 等)。但是在 C# 8.0 中,我们可以通过 System.Index 类型来定义范围索引器。比如:

public int this[Index index]
{
    get { /*...*/ }
    set { /*...*/ }
}

这样我们就可以通过 obj[0..10] 的方式来访问对象中的元素。

索引器的默认实现

在定义索引器时,我们可以只定义 getset 方法中的一种,这时候另一种方法会默认为空方法。比如:

public int this[int index]
{
    get { /*...*/ }
}

这个索引器只允许读取元素,无法写入。

结语

索引器是 C# 中十分实用的特性,在处理集合数据类型时非常方便。通过本文,希望能够让大家深入了解索引器的原理和使用方法。