索引器是c#中提供允許像訪問數組一樣訪問類或結構的執行個體的一種方式。索引器類似於屬性,不同之處在於他的訪問器採用參數,並用this關鍵字來定義。
1. 索引器的定義文法:
private T[] arr = new T[100]; public T this[int i] { get { return arr[i]; } set { arr[i] = value; } }
1) 存取修飾詞,此處是public,索引器的類型和參數類型必須至少如同索引器本身一樣是可訪問的;
2)類型T,根據定義的執行個體類型;
3)關鍵字this,如果要為索引器提供一個別的語言可以使用的名字,可以使用name特性:此索引器重新命名為ReNamed,不提供名稱特性將產生Item預設名稱;
[System.Runtime.CompilerServices.IndexerName("ReNamed")] public int this[int index] { }
4)get,set訪問器方法,以及所以index. index類型可以不是int類型,像string;
2. 介面中的索引器
1)與類索引器不同,介面中的索引器不能使用修飾符,訪問器沒有體,表示索引器是讀寫,唯讀還是唯寫;
2)當類使用同一索引器簽名實現一個以上的介面時,為避免多義性,需要使用完全限定名,即用介面名.this[int index], 如:
interface test1{ int this[int index] { get; set; }}interface test2{ int this[int index] { get; set; }}class Program{ int[] arr=new int[100]; public int test1.this[int index] { get { return arr[index]; } set { arr[index] = value; } }}
3. 屬性和索引器的區別:
屬性 |
索引器 |
允許像調用公用資料成員一樣調用方法, |
允許對一個對象本身使用數組標記法來訪問該對象內部集合中的元素。 |
可以為靜態成員或執行個體成員。 |
必須為執行個體成員。 |
屬性的 get訪問器沒有參數,屬性的 set訪問器包含隱式 value 參數 |
索引器的 get, set 訪問器具有與索引器相同的形參表。 |
支援對自動實作屬性使用短文法。 |
不支援短文法。 |