索引器定义类似于属性但其功能与属性并不相同索引器提供一种特殊的方法编写get和set访问器属性可以像访问字段一样访问对象的数据索引器可以使用户像访问数组一样访问类成员定义索引器的语法如下:
<访问修饰符> 类型名称 this [类型名称 参数名]
{
get{//获得属性的代码}
set{ //设置属性的代码}
}
索引器没有像属性和方法那样的名字关键字this清楚地表达了索引器引用对象的特征和属性一样value关键字在set后的语句块里有参数传递意义
和方法一样索引器有种存取保护级别newpublicprotectedinternalprivate和种继承行为修饰virtualsealedoverrideabstract以及外部索引器这些行为同方法没有任何差别唯一不同的是索引器不能为静态(static)这在对象引用的语义下很容易理解值得注意的是在重写(override)实现索引器时应该用base[E]来存取父类的索引器
和属性的实现一样索引器的数据类型同时为get语句块的返回类型和set语句块中value关键字的类型
索引器的参数列表也是值得注意的地方索引的特征使得索引器必须具备至少一个参数该参数位于this关键字之后的中括号内索引器的参数也只能是传值类型不可以有ref(引用)和out(输出)修饰参数的数据类型可以是C#中的任何数据类型C#根据不同的参数签名来进行索引器的多态辨析中括号内的所有参数在get和set下都可以引用而value关键字只能在set下作为传递参数
定义索引器应注意以下内容:
所有索引器都使用this关键词来取代方法名Class或Struct只允许定义一个索引器而且总是命名为this
索引器允许类或结构的实例按照与数组相同的方式进行索引索引器类似于属性不同之处在于它们的访问器采用参数
get 访问器返回值set 访问器分配值
this 关键字用于定义索引
value 关键字用于定义由 set 索引器分配的值
索引器不一定根据整数值进行索引您可以根据编程要求指定参数类型
索引器可被重载
索引器可以有多个形参例如当访问二维数组时
索引器的方括号中可以是任意参数列表