关闭

C#中的索引器的简单理解和用法

发表于:2013-6-08 10:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:宋坤明    来源:51Testing软件测试网采编

  索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。

  1、索引器的定义

  C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。

  定义索引器的方式与定义属性有些类似,其一般形式如下:

  1. [修饰符] 数据类型 this[索引类型 index]  
  2. {  
  3.     get{//获得属性的代码}                                                  
  4.     set//设置属性的代码} 
  5. }

  修饰符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern.

  数据类型是表示将要存取的数组或集合元素的类型。

  索引器类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串;this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称。例如:

  1. class Z  
  2. {  
  3.         //可容纳100个整数的整数集 
  4.         private long[] arr = new long[100];  
  5.         //声明索引器 
  6.         public long this[int index]  
  7.         {  
  8.             get 
  9.             { //检查索引范围 
  10.                 if (index < 0 || index >= 100)  
  11.                 {  
  12.                     return 0;  
  13.                 }  
  14.                 else 
  15.                 {  
  16.                     return arr[index];  
  17.                 }  
  18.             }  
  19.             set 
  20.             {  
  21.                 if (!(index < 0 || index >= 100))  
  22.                 {  
  23.                     arr[index] = value;  
  24.                 }  
  25.             }  
  26.    }

  2、索引器的使用

  通过索引器可以存取类的实例的数组成员,操作方法和数组相似,一般形式如下:

  对象名[索引]

  其中索引的数据类型必须与索引器的索引类型相同。例如:

  1. Z  z=new  z();  
  2. z[0]=100;  
  3. z[1]=101;  
  4. Console.WriteLine(z[0]);

  表示先创建一个对象z,再通过索引来引用该对象中的数组元素。

  C#中并不将索引器的类型限制为整数。例如,可以对索引器使用字符串。通过搜索集合内的字符串并返回相应的值,可以实现此类的索引器。由于访问器可以被重载,字符串和整数版本可以共存。

  example:

  1. class DayCollection
  2. {   
  3.       string[] days={"Sun","Mon","Tues","Wed","Thurs","Fri","Sat"};  
  4.       private int GetDay(string testDay)  
  5.      {  
  6.         int i=0;  
  7.         foreach(string day in days)  
  8.           {  
  9.               if(day==testDay)  
  10.                       return i;  
  11.                       i++;  
  12.            }  
  13.          return -1;  
  14.       }  
  15.      public int this[string day]  
  16.       {  
  17.           get{return (GetDay(day))}  
  18.       }  
  19. }  
  20.   
  21. static void Main(string[] args)  
  22. {  
  23.      DayCollection week=new DayCollection();  
  24.      Console.WriteLine("Fri:{0}",week["Fri"]);  
  25.      Console.WriteLine("ABC:{0}",week["ABC"]);  
  26. }

  结果:Fri:5

  ABC:-1

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号