概念
一组get和set访问器,与属性类似
索引器和属性
相同
- 和属性—样,索引器不用分配内存来存储。
- 和属性一样,索引器可以只有一个访问器,也可以两个都有。
- 和属性一样,实现get和set访问器的代码不必一定要关联到某个字段或属性。这段代码可以做任何事情或什么也不做,只要get访问器返回某个指定类型的值即可。
不同
- 索引器和属性都主要被用来访问其他数据成员,它们与这些成员关联,并为它们提供获取和设置访问。
- 属性通常表示单独的数据成员。
- 索引器通常表示多个数据成员。
- 索引器总是实例成员。因此不能声明为static。
可以认为索引器是为类的多个数据成员提供get和set的属性
声明索引器
规则
- 索引器没有名称。在名称的位置是关键字this。
- 参数列表在方括号中间。
- 参数列表中必须至少声明一个参数。
语法
void this[int index]
{
set {
}
get {
}
}
索引器的set访问器
当使用索引器获取值时,可以通过一个或多个索引参数调用get访问器被。索引参数指示获取哪个值。
- 它的参数列表和索引器声明中的相同。
- 它返回与索引器相同类型的值。
和属性一样,不能显式调用get和set访问器
例
class Employee
{
public string LastName; //调用字段0
public string FirstName; //调用字段1
public string CityOfBirth; //调用字段2
public string this[int index]
{
set
{
switch (index)
{
case 0:
LastName = value;
break;
case 1:
FirstName = value;
break;
case 2:
CityOfBirth = value;
break;
default:
throw new ArgumentOutOfRangeException("index");
}
}
get
{
switch (index)
{
case 0: return LastName;
case 1: return FirstName;
case 2: return CityOfBirth;
default:
throw new ArgumentOutOfRangeException(null);
}
}
}
}
class Program
{
static void Main(string[] args)
{
Employee e = new Employee();
e[0] = "LastName";
Console.WriteLine($"{e[0]}");
Console.ReadKey();
}
}
结果
LastName
索引器重载
class MyClass
{
public string this[int index]
{
get{}
set{}
}
public string this[int index]
{
get{}
set{}
}
}