9.15 索引器
我们前面讲了属性和属性访问器,索引器非常类似于属性。先来看一个实例,如代码清单9-40所示。
代码清单9-40 索引器
class Class
{
private string[]students=new string[3];
public string this[int studentNo]
{
get
{
return students[studentNo];
}
set
{
students[studentNo]=value;
}
}
}
上述代码中的粗体部分就是索引器,从结构上来看,它和属性相似,同样都有get和set访问器,不同的是:
❑每一个属性的名称必须唯一,而每一个索引器的签名必须唯一(注意,比属性的名称唯一更宽泛,只需要签名唯一即可),不同的索引器签名可以实现索引器重载;
❑索引器的“属性名”统一为this,而不能为其他,专门用以定义索引器,它和9.8节讲的this返回当前类实例不同;
❑索引器的参数列表包含在方括号而不是圆括号之内;
❑属性可以是静态的,而索引器只能为实例成员;
❑属性的get访问器没有参数,而索引器的get访问器可以有参数,而且后者的get访问器和set访问器的参数相同;
❑索引器可以有多个形参,比如访问多维数组时。
索引器主要用于封装类的内部集合或数组,其使用方式也类似于数组。下面,我们对比分析一下索引器和数组的异同,如表9-8所示。
接下来,我们看看如何使用索引器,索引器可以让我们像访问数组一样访问类中的集合或者数组,下面的示例演示如何使用定义了索引器的类,如代码清单9-41所示。
代码清单9-41 通过索引器访问类内部集合或数组
class ClassExample
{
static void Main()
{
Class classOne=new Class();
classOne[0]=“杨康”;
classOne[1]=“郭靖”;
classOne[2]=“黄蓉”;
System.Console.WriteLine(classOne[0]);
System.Console.WriteLine(classOne[1]);
System.Console.WriteLine(classOne[2]);
for(int i=0;i<3;i++)
{
System.Console.WriteLine(classOne[i]);
}
}
}