C#索引器-索引器和属性的区别
属性和索引器的差别:一个对象只有一个属性值,所以要存放多个值必须实例化多个对象(通常情况下,实例化一个数组的对象,接着实例化的对象赋给这个数组)。一个对象对应的索引是一个数组,并且可以存放多个数值或字符串,所以只需要实例化一个对象就可以存放以及访问多个存储内容。
using System;
using System.Collections.Generic;
namespace aaa
{
public class arrClass{ //通过构造方法以及属性进行赋值
private string name;//定义一个字段
public string Name{ //定义一个属性,通过属性来修改name字段的值
get{return name;} //通过Name来获取name的值
set{name=value;} //通过Name将值赋给name字段
}
public arrClass(string name){ //构造函数,实例化一个对象就执行一次
this.Name=name; //把实例化对象带进来的参数name赋值给Name属性
}
}
class indexer{ //创建一个索引器类
private string[] name=new string[10];//定义一个索引字段数组,也可以为int[]
public string this[int index]{ //定义索引器,string是索引器类型,this来定义索引器
get{return name[index];} //index就是string里面的数值,获取name[index]的值,例如获取name[3]的值
set{name[index]=value;} //将值赋值给name[index]。例如把字符串"dengyun"赋值给name[3]
}
}
class index1{ //这里又创建了一个索引器类
private int[] age=new int[10]; //这边索引器字段的值为int型的
public int this[int index]{
get {return age[index];} //获取age[index]的值
set {age[index]=value;} //赋值
}
}
class MainClass{
public static void Main(string[] args) //主方法一定要为static
{
indexer b=new indexer(); //实例化一个索引对象b,b有点类似数值b[10],这是索引器的特别之处
b[0]="张三";//这里面b[index]的index为0,赋值“张三”给b[0]
b[1]="李四";//赋值“李四”给b[1]
b[2]="王五";//赋值“王五”给b[2]
Console.WriteLine(b[0]);//输出b[0],可以理解为数值就存放在数组b中。
Console.WriteLine(b[1]);
Console.WriteLine(b[2]);
arrClass[] a = new arrClass[10];//实例化一组对象,实例化一整个数组的对象
a[0]=new arrClass("张三");//实例化一个对象,将它存入实例化的数组a中,它的存放位置是a[0]
a[1]=new arrClass("李四");
a[2]=new arrClass("王五");
Console.WriteLine(a[0].Name);//通过对象来访问自己的属性值来输出数值
Console.WriteLine(a[1].Name);
Console.WriteLine(a[2].Name);
index1 i = new index1(); //和带属性的类相比,索引器类只需要实例化一个对象
i[0]=18;
i[1]=22;
i[9]=9;
i[10]=10;//索引超出了,报错。
Console.WriteLine(i[0]);
Console.WriteLine(i[1]);
Console.WriteLine(i[9]);
Console.WriteLine(i[10]);
Console.Read();
}
}
}