之前雖然有看過C#的「索引子 (Indexers)」,但沒有進一步去了解它的用法。最近聽到別人的介紹,才發覺「索引子」運用得宜的話,對程式的可讀性會加分不少。
程式範例
使用簡單的「課程」及「學生」來做介紹
public class Student
{
public int Number { get; set; }
public string Name { get; set; }
}
public class Course
{
public Course(string name)
{
Name = name;
Members = new List<Student>();
}
public string Name { get; private set; }
public List<Student> Members { get; private set; }
public void AddStudent(Student member)
{
Members.Add(member);
}
}
當需要找尋某個號碼的學生資訊,程式就會像下面這樣。第一種作法是沒有「索引子」,第二種則是使用「索引子」的做法。
Course course = new Course("C#");
course.AddStudent(new Student { Name = "brian", Number = 1 });
int queryNumber = 1;
//一般作法
Console.WriteLine(course.Members.First(s => s.Number == queryNumber).Name);
//索引子作法
Console.WriteLine(course[queryNumber].Name);
Console.ReadKey();
對比之下,索引子的做法可讀性會好非常多。接著來看一下「索引子」要如何實作。
public Student this[int number]
{
get
{
return Members.FirstOrDefault(s => s.Number == number);
}
}
- 「索引子」和「屬性(Property)」類似,都有get與set
- 用 this關鍵字
- 後面的參數可使用多種型態,比較常用的有 int 及 string
- 參數可多個
整體來說,「索引子」算是非常單純的一種運用,之後我在設計程式的時候應該會很常用到。