索引器允许类或者结构的实例按照与数组相同的方式进行索引。索引器类似属性,但不同之处在于它们的访问器采用参数。它可以像数组那样对对象采用下标。它提供了通过索引方式方便地访问类的数据信息的方法。
C#并不将索引类型限制为整数,所以我们可以通过访问器的重载,实现整数索引或者字符串索引。
重载索引器时,要保证形参的数量或形参类型至少有一不同。这一点同C#中方法重载貌似没有什么区别。
下面我们就通过简单的例子,实现整数索引和字符串索引。
在这个例子中,我们需创建两个类 --> Student Students
Student类中,包含学生基本信息(属性)和一个方法SayHi()
Students类中,包含我们要创建的两种索引器,一个Student类类型的数组
- /// <summary>
- /// Student类 具备学生基本属性 一个方法SayHi()
- /// </summary>
- public class Student
- {
- //构造函数
- public Student(string name,int age,string hobby)
- {
- this.Name = name;
- this.Age = age;
- this.Hobby = 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);
- }
- }
- /// <summary>
- /// Students类,含有两种简答索引器
- /// </summary>
- public class Students
- {
- //构造函数
- public Students()
- {
- stu[0] = new Student("rose",20,"dancing");
- stu[1] = new Student("jack",21,"football");
- stu[2] = new Student("mimi",20,"reading");
- }
- public Student[] stu = new Student[3]; //Student类型的数组
- //简单整数索引器
- 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;
- }
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Students stu = new Students(); //实例化一个Students类的对象
- stu[0].SayHi(); //通过索引查找
- stu["jack"].SayHi(); //通过姓名查找
- }
- }
以上,我们就实现了一个简单的索引器~~~