其实索引器与属性本是谁也不认识谁的只是为了实现各自的功能都用了经典的get和set方法,大家就非得把他们比较来比较去!
只需要记住【属性是来封装字段,索引器是提供给一些没有索引功能的类对象们附加上一种功能】
索引器允许您按照与数组的方式对类、结构、接口进行索引。注意要声明类或结构上的索引,一定要使用this关键字
,比如:public int this [int index]
索引器的特点:
1)允许调用对象上的方法,如同对象是一个数组。
2)可以通过索引器进行访问。
3)必须为实例成员。
4)索引器的get访问器具有与索引器相同的行参列表。
5)除了value参数外,索引器的set访问器还具有与索引器相同的行参表。
属性的特点:
1)允许调用方法,如同它们是公共数据成员。
2)可以通过简单的名称进行访问。
3)可以为静态成员或者实例成员。
4)属性的get访问器没有参数。
5)属性的set访问器包含隐式value参数。
举个例子说明如何声明私有数组和索引器,使用索引器访问实例test[i]代码如下:
class IndexerClass
{
 private int[] arr=new int [100];
 public int this[int index]
 {
  get
  {
   if (index<0||index>=100)
   {
    return 0;
   }
   else
   {
    return arr[index];
   }
  }
  set
  {
   if(!(index<0||index>=100))
   {
    arr[index]=value;
   }
  }
 }
}
class MainClass
{
 static void Main()
 {
  IndexerClass test =new IndexerClass();
  test[3]=256;
  test[5]=1024;
  for(int i=0;i<=10;i++)
  {
   System.Console.WriteLine("Element#{0}={1}",i,test[i]);
  }
 }
}
请注意,当计算索引器的访问时(例如,在 Console.Write 语句中),将调用 get 访问器。因此,如果 get 访问器不存在,将发生编译时错误。