📅  最后修改于: 2023-12-03 15:00:14.113000             🧑  作者: Mango
在 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
字典中的元素。
索引器可以像普通属性一样被声明、使用和定制。可以为索引器声明 get
和 set
访问器,以便在检索和设置值时执行特定的操作:
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# 中的一个特殊属性,它允许类或结构体像数组一样被索引。您可以声明、使用和定制索引器,这些技术可以使您的代码更加清晰、简洁和可读。