c#索引器學(xué)習(xí)
索引器:
索引器允許類或結(jié)構(gòu)的實例就像數(shù)組一樣進(jìn)行索引。 無需顯式指定類型或?qū)嵗蓡T,即可設(shè)置或檢索索引值。 索引器類似于屬性,不同之處在于它們的訪問器需要使用參數(shù)。
以下示例定義了一個泛型類,其中包含用于賦值和檢索值的簡單?get?和?set?訪問器方法。?Program
?類創(chuàng)建了此類的一個實例,用于存儲字符串。

(????
????????在c#6.0可以 使用?
????????public T this[int i] => arr[i];
????????=>引入了表達(dá)式主體,可以不使用get關(guān)鍵字
????????日常中使用,發(fā)現(xiàn)底層多數(shù)是數(shù)組實現(xiàn),現(xiàn)在都用泛型List等封裝好的方法
)
技巧:
1.在定義索引器的時候,不一定只采用一個參數(shù),同一類中還可以擁有一個以上的索引器,也就是重載。
2.索引器的參數(shù)可以采用任何類型,不過int是最為合理的類型。
屬性和索引器差別:
?1.類的每一個屬性都必須擁有唯一的名稱,而類里定義的每一個索引器都必須擁有唯一的簽名(signature)或者參數(shù)列表(這樣就可以實現(xiàn)索引器重載)。?
?2.屬性可以是static(靜態(tài)的)而索引器則必須是實例成員。?
?3.為索引器定義的訪問函數(shù)可以訪問傳遞給索引器的參數(shù),而屬性訪問函數(shù)則沒有參數(shù)。?
接口(interface):
類似數(shù)組的行為常受到程序?qū)崿F(xiàn)者的喜愛,所以你還可以為接口定義索引器,IList和 IDictionary集合接口都聲明了索引器以便訪問其存儲的項目。? 在為接口聲明索引器的時候,記住聲明只是表示索引器的存在。你只需要提供恰當(dāng)?shù)脑L問函數(shù)即可,不必包括范圍修飾符。以下代碼把索引器聲明為接口IImplementMe的一部分:
interface IImplementMe {? string this[int index]? {? get;? set;? }?
相應(yīng)實現(xiàn)的類則必須為IimplementMe的索引器具體定義get和set訪問函數(shù)。?
(大部分內(nèi)容來自https://docs.microsoft.com/的C#API文檔)
最開始接觸索引器是來自同事,但是使用之后(個人感想)我覺得索引器并不能在多數(shù)場合下使用,在實際的這次使用中也發(fā)現(xiàn)邏輯不通順的情況,所以重新在學(xué)習(xí)一下。