和函数参数类似的参数(不过是方括号,而不是函数的圆括号),然后是索引体。
你不能使用静态索引,所以你不能在索引的声明中使用static关键字。
索引可以被声明为虚拟的,因此它可以在它的派生类中被重载。
索引的参数不能使用ref/out型参数。例如:
1
struct StringSection
2
}
2
注意,这里的属性名是this,意思是回引类的当前实例,参数列表包含在方括号而非括号之内。
索引的声明和属性一样:只能含有set/get语句。
当使用一个索引表达式进行读操作时,索引的get语句自动运行
当使用一个索引表达式进行写操作时,索引的set语句自动运行
属性和索引器
属性和索引器之间有好些差别:
类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。
属性可以是static(静态的)而索引器则必须是实例成员。
为索引器定义的访问函数可以访问传递给索引器的参数,而属性访问函数则没有参数
接口与索引
接口定义索引器,如IList和 IDictionary集合接口都声明了索引器以便访问其存储的项目。
在为接口声明索引器的时候,记住声明只是表示索引器的存在。你只需要提供恰当的访问函数即可,不必包括范围修饰符。只需定义作因名称,相应的实现方法则应该为该类提供该类的索引器的方法.以下代码把索引器声明为接口IImplement的一部分:
下面附上一个例子
输出:
abc
xyz
911
zhoumin
welcome
911
****************************************
ha,ha
ha,ha
ha,ha
null