📅  最后修改于: 2023-12-03 15:30:18.186000             🧑  作者: Mango
C#中的索引器(Indexer)是一种特殊的属性,它允许对象像数组一样通过索引访问其元素。索引器可以是数组、列表或其他集合类型的封装器。通过索引器,我们可以像访问数组元素一样访问对象中的元素。默认情况下,C#提供了一个内置的索引器,但是,我们也可以对自己定义的类实现索引器。
public ElementType this[int index]
{
get
{
// 返回指定索引位置的值
}
set
{
// 设置指定索引位置的值
}
}
其实现了数组下标访问符[]的访问器。
在C#中,索引器还支持重载。它允许我们为一个类定义多个索引器,只要它们接受不同的参数类型或参数数量。
我们可以使用下面的语法来实现索引器的重载:
public <return-type> this[<index-parameter-list>]
{
// Add getter and/or setter logic here
}
public <return-type> this[<index-type-1> index1, ..., <index-type-n> indexn]
{
// Add getter and/or setter logic here
}
第一个索引器使用单个参数来访问元素,而第二个索引器使用多个参数。在第二个索引器中,参数的数量和类型都可以不同。
public class Employee
{
private string[] empData = new string[4];
public string this[int index]
{
get
{
if (index < 0 || index >= empData.Length)
throw new IndexOutOfRangeException("Index out of range");
else
return empData[index];
}
set
{
if (index < 0 || index >= empData.Length)
throw new IndexOutOfRangeException("Index out of range");
else
empData[index] = value;
}
}
public string this[string index]
{
get
{
for (int i = 0; i < empData.Length; i++)
if (empData[i] == index)
return empData[i];
throw new IndexOutOfRangeException("Index out of range");
}
}
}
以上代码示例定义了一个Employee类,该类实现了两个索引器。第一个索引器使用int类型的索引,而第二个索引器使用string类型的索引。第一个索引器允许我们使用下标操作符[]来访问和修改对象中存储的字符串数组。第二个索引器按照索引的字符串值来查找和返回数组中的元素。
可以使用下面的语法来调用这些索引器:
// 对象初始化
Employee emp = new Employee
{
// 调用第一个索引器:
[0] = "Shivendra",
[1] = "Singh",
[2] = "Bisht",
[3] = "1989-07-15"
};
// 调用第二个索引器:
Console.WriteLine(emp["Singh"]);
索引器超载是C#中一个强大的特性,在许多情况下都非常有用。通过这个特性,我们可以对自己定义的类实现类似于数组一样的下标访问符[]。超载索引器可以让我们更好地控制和管理类中的元素。