索引器允许类或者结构的实例按照与数组相同的方式进行索引。索引器类似属性,但不同之处在于它们的访问器采用参数。
属性启用类似字段的访问,而索引器启用类似数组的访问。
它可以像数组那样对对象采用下标。它提供了通过索引方式方便地访问类的数据信息的方法。
C#并不将索引类型限制为整数,所以我们可以通过访问器的重载,实现整数索引或者字符串索引。
重载索引器时,要保证形参的数量或形参类型至少有一不同。这一点同C#中方法重载貌似没有什么区别。
下面我们就通过简单的例子,实现整数索引和字符串索引。
在这个例子中,我们需创建两个类 --> Student Students
Student类中,包含学生基本信息(属性)和一个方法SayHi()
Students类中,包含我们要创建的两种索引器,一个Student类类型的数组
//Student类
public Class Student
{ //构造函数
public Student(){}
public Student(string name,int age,string hobby)
{
this.name = name;
this.age = age;
this.hobby = hobby;
}
//三个属性 (姓名)Name,(年龄)Age,(爱好)Hobby
private string name;
public String Name
{
get{return name;}
set{name = value;}
}
private int age;
public int Age
{
get{return age;}
set{age = value;}
}
private string hobby;
public string Hobby
{
get{return hobby;}
set{hobby = value;}
}
//方法
public void SayHi()
{ Console.WriteLine("大家好,我是{0},今年{1}岁,喜欢 {2}",Name,Age.ToString(),Hobby); }
}
//Students类
Public Class Students
{ //加载时初始化stu数组
public Students()
{ stu[0] = new Student("rose",21,"dancing");
stu[1] = new Student("jack",22,"reading");
stu[2] = new Student("mimi",21,"singing"); }
//Student类类型数组属性
private Student [] stu = new Student[3];
//整数索引器
public Student this[int index]
{
get{return stu[index];}
}
//字符串索引器
public Student this[string name]
{
get { int i ; bool found = false; for(i = 0;i < stu.length;i ++)
{ if(stu[i].Name == name)
{ found = true; break; } }
if(found) { return stu[i]; }
else {return null; }
}
}
}
Public Class Program
{ //Main函数中
static void Main()
{Students stu = new Students();
stu[0].SayHi(); //通过索引查找
stu["rose"].SayHi(); //通过姓名查找
Console.ReadKey(); }
}