A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

索引器的作用,索引器本质是操作类内部集合成员的方法吗?

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

3 个回复

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


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


修饰符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern.
数据类型是表示将要存取的数组或集合元素的类型。
索引器类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串;this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称。
索引器参数可以不止一个,类型也不限于int,几乎可以是任意类型
回复 使用道具 举报
本帖最后由 sxdxgzr@126.com 于 2013-8-4 21:47 编辑

首先肯定的是:索引器最后还是落到操作类内部集合成员的方法,楼主想的是对的。
另外多罗嗦几句:属性分为两种:无参数性(常说的属性)和有参属性(所谓的索引器)。索引器是有参属性,编译器也会生成相应的get访问器(至少一个入参(索引参数)),set访问器(至少两个参数)。
看个msdn上的例子():

  1. class SampleCollection<T>
  2. {
  3.     private T[] arr = new T[100];
  4.     public T this[int i]
  5.     {
  6.         get
  7.         {
  8.             return arr[i];
  9.         }
  10.         set
  11.         {
  12.             arr[i] = value;
  13.         }
  14.     }
  15. }

  16. // This class shows how client code uses the indexer
  17. class Program
  18. {
  19.     static void Main(string[] args)
  20.     {
  21.         SampleCollection<string> stringCollection = new SampleCollection<string>();
  22.         stringCollection[0] = "Hello, World";
  23.         System.Console.WriteLine(stringCollection[0]);
  24.     }
  25. }
复制代码
这是ildasm 看到的元数据信息:
也正说明了索引器其实也就是有参属性。只不过以this[int i] 方式定义 ,一般生成的访问器名称为get_Item,set_Item.

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 念念念念_、 于 2013-8-4 20:52 编辑

   C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。定义索引器的方式与定义属性有些类似,其一般形式如下:
[修饰符] 数据类型 this[索引类型 index]

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马