大家好,小尧来为大家解答以上问题。索引器是什么,索引器很多人还不知道,现在让我们一起来看看吧!
1、索引器索引器的两个用法和功能允许你以数组的方式索引类、结构或接口。有关将索引器用于接口的更多信息,请参见接口索引器
2、若要在类或结构上声明索引器,请使用此关键字,如下面的示例所示:
3、复制代码public int this[int index]//索引器声明{//get和set accessors}
4、索引器类型及其参数类型必须至少像索引器本身一样可访问。有关可访问性级别的更多信息,请参见访问修饰符。
5、索引器签名包括其形式参数的数量和类型。它不包括索引器类型或形参名称。如果在同一个类中声明了多个索引器,它们必须有不同的签名。
6、索引器值不归类为变量;因此,索引器值不能作为ref或out参数传递。
7、要为索引器提供一个可以在其他语言中使用的名称,请在声明中使用name属性。例如:
8、复制代码[系统。runtime.compiler services . cs harp . indexer name(' item ')]public int this[int index]//索引器声明{}
9、这个索引器将被命名为TheItem。未提供名称属性将生成项目的默认名称。
10、1示例说明以下示例说明了如何声明私有数组字段,arr和索引器使用索引器直接访问实例test[i]。使用索引器的另一种方法是将数组声明为公共成员,并直接访问其成员arr[i]。
11、C#复制代码类索引器类{ private int[]arr=new int[100];public int this[int index] //索引器声明{ get { //检查索引限制。if(index 0 | | index=100){ return 0;} else { return arr[index];} }设置{ if(!(索引0 ||索引=100)){ arr[索引]=值;} } }}
12、class Main class { static void Main(){ indexer class test=new indexer class();//调用索引器初始化元素#3和#5。测试[3]=256;测试[5]=1024;for(int I=0;i=10i ) {系统。console . WriteLine(' Element # { 0 }={ 1 } ',I,test[I]);} }}
13、输出元素#0=0
14、元素#1=0
15、元素#2=0
16、元素#3=256
17、元素#4=0
18、元素#5=1024
19、元素#6=0
20、元素#7=0
21、元素#8=0
22、元素#9=0
23、元素#10=0
24、注意,在计算索引器的访问权限时(例如,在控制台中。Write语句),将调用get访问器。因此,如果get访问器不存在,将会发生编译时错误。
25、使用其他值来索引C#不会将索引类型限制为整数。例如,对索引器使用字符串可能是有用的。这种索引器可以通过在集合中搜索字符串并返回相应的值来实现。因为访问器可以重载,所以字符串和整数版本可以共存。
26、2示例说明在这个示例中,声明了存储星期几的类。声明一个get访问器,它接受一个字符串(日名称)并返回相应的整数。例如,星期日将返回0,星期一将返回1,以此类推。
27、code # copy code//使用字符串作为索引器值类day collection { string[]days={ ' sun ',' mon ',' tues ',' wed ',' thumbs ',' fri ',' sat ' };
28、//此方法查找日期或返回-1 private int GetDay(string test day){ int I=0;foreach(string day in days){ if(day==test day){ return I;}我;} return-1;}
29、//get访问器返回给定字符串public int this[string day]{ get { return(GetDay(day));} }}
30、类程序{ static void Main(string[]args){ day collection week=new day collection();系统。console . WriteLine(week[' Fri ']);系统。console . WriteLine(week[' Made-ed Day ']);}}
31、5输出
32、-1
33、通过可靠地编程来提高索引器的安全性和可靠性有两种主要方法:
34、当从索引器,访问的任何缓冲区或数组中设置和检索值时,请始终确保您的代码执行范围和类型检查。
35、您应该为get和set访问器的可访问性设置尽可能多的限制。这对于set访问器尤其重要。有关更多信息,请参见非对称访问器可访问性(C#编程指南)。
本文到此结束,希望对大家有所帮助。