クラスまたは構造体にインデクサを定義すると、a[i]のように、配列同様に、「インデックス」によるアクセスが可能になります。
同じクラスに複数のインデクサを定義することも可能です。その場合は、メソッドのオーバーロードと同様に、パラメータのシグネチャを別々にする必要があります。パラメータの型が同じで、「インデクサの型」だけが異なるインデクサを定義することはできません。
using System; using System.Collections.Generic; using System.Text; namespace Gushwell.Sample { public class Book { public string Name { get; set; } public string Author { get; set; } public string Publisher { get; set; } public string ISBN { get; set; } public Book(string name, string author, string publisher, string isbn) { this.Name = name; this.Author = author; this.Publisher = publisher; this.ISBN = isbn; } } public class BookList { private List<Book> books = new List<Book>(); public void Add(Book book){ books.Add (book); } // インデクサの定義 public Book this[int index]{ get { return books [index]; } } public Book this[string ISBN]{ get { foreach (Book b in books) if (b.ISBN == ISBN) return b; return null; } } } class Program { static void Main(string[] args){ BookList books = new BookList (); books.Add(new Book("こころ", "夏目漱石", "新潮社", "978-4101010137")); books.Add (new Book ("人間失格", "太宰治", "角川書店", "978-4041099124")); Book book1 = books [0]; Console.WriteLine (book1.Name); Book book2 = books ["978-4041099124"]; Console.WriteLine (book2.Name); Console.ReadLine (); } } }