属性和索引器的差别:一个对象只有一个属性值,所以要存放多个值必须实例化多个对象(通常情况下,实例化一个数组的对象,接着实例化的对象赋给这个数组)。一个对象对应的索引是一个数组,并且可以存放多个数值或字符串,所以只需要实例化一个对象就可以存放以及访问多个存储内容。
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(); }}}