细谈C#中的索引器跟属性的区别:
索引器允许您按照与数组的方式对类、结构、接口进行索引。注意要声明类或结构上的索引,一定要使用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 访问器不存在,将发生编译时错误。