📜  C#-索引器(1)

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

C# 索引器

在 C# 中,索引器是一种允许类或结构体的实例像数组一样被索引的特殊属性。使用索引器,您可以将一个索引或 key 传递给类或结构的实例,以访问其内部数据结构中的元素或属性。

声明索引器

要声明一个索引器,您需要使用 this 关键字后面跟上方括号 [] ,并指定返回值的类型:

public class MyClass
{
    private int[] _array = new int[10];

    public int this[int index]
    {
        get { return _array[index]; }
        set { _array[index] = value; }
    }
}

上述代码中,索引器的名称为 this ,后面跟着一个方括号 [] ,表示可以使用整数索引来访问 MyClass 类的实例。

使用索引器

可以像使用数组一样使用索引器。例如,在上面的示例中,可以使用以下方式为 _array 数组中的元素赋值:

MyClass myClass = new MyClass();
myClass[0] = 42;

可以使用以下方式获取 _array 数组的元素:

int x = myClass[0];
索引器重载

您可以在同一个类中声明多个索引器,它们的参数可以是不同类型的。这被称为索引器重载。例如,假设您有一个 Dictionary 类型的类:

public class MyDictionary<TKey, TValue>
{
    private Dictionary<TKey, TValue> _dictionary = new Dictionary<TKey, TValue>();
    
    public TValue this[TKey key]
    {
        get { return _dictionary[key]; }
        set { _dictionary[key] = value; }
    }
}

上述示例中,MyDictionary<TKey, TValue> 类中声明了一个参数类型为 TKey 的索引器,用于访问 _dictionary 字典中的元素。

索引器属性

索引器可以像普通属性一样被声明、使用和定制。可以为索引器声明 getset 访问器,以便在检索和设置值时执行特定的操作:

public class MyClass
{
    private List<string> _list = new List<string>();

    public string this[int index]
    {
        get { return _list[index]; }
        set
        {
            if (index == _list.Count)
            {
                _list.Add(value);
            }
            else if (index < _list.Count)
            {
                _list[index] = value;
            }
            else
            {
                throw new IndexOutOfRangeException();
            }
        }
    }
}

上述示例中,MyClass 类的索引器使用了一个 List<string> 内部实现。在 set 访问器中,它检查了索引的有效性,并根据需要自动调整列表的大小。

总结

索引器是 C# 中的一个特殊属性,它允许类或结构体像数组一样被索引。您可以声明、使用和定制索引器,这些技术可以使您的代码更加清晰、简洁和可读。