C#中的索引器
最近看面試題也好,敲手頭書(shū)上的例子也好,都讓我看到了索引器這個(gè)概念,原來(lái)沒(méi)有接觸過(guò),今天就來(lái)看看什么是C#中的索引器
索引器允許類(lèi)或結(jié)構(gòu)的實(shí)例就像數(shù)組一樣進(jìn)行索引。
索引器類(lèi)似于屬性,不同之處在于他們的取值函數(shù)采用參數(shù)
用在哪里
索引器經(jīng)常是在主要用于封裝內(nèi)部集合或數(shù)組的類(lèi)型中實(shí)現(xiàn)的。假如,假定具有一個(gè)名為T(mén)empRecord的類(lèi),此類(lèi)表示在24小時(shí)內(nèi)的10個(gè)不同時(shí)間記錄的華氏溫度。此類(lèi)包含一個(gè)表示溫度的Float類(lèi)型的名為“temps”的數(shù)組和表示記錄溫度的日期的DateTime
通過(guò)在此類(lèi)中實(shí)現(xiàn)一個(gè)索引器,客戶(hù)端可以通過(guò)float temp=tr[4]而不是float temp=tr.temps[4]語(yǔ)法訪問(wèn)此類(lèi)實(shí)例出對(duì)象的溫度
語(yǔ)法結(jié)構(gòu):聲明類(lèi)或結(jié)構(gòu)上的索引器,要使用this關(guān)鍵字
//[修飾符] 數(shù)據(jù)類(lèi)型 this[索引類(lèi)型 index] {get{//獲得屬性的代碼} set{ //設(shè)置屬性的代碼} }Demo
/// <summary>/// 最簡(jiǎn)單的索引器/// </summary>public class Person{//聲明私有數(shù)組private string[] hero = new string[5] { "老白","小粉" , "炸雞哥", "空姐", "Hank" };public int Length{get { return hero.Length; }}//聲明索引public string this[int index] {get {return hero[index];}set{hero[index] = value;}}class Program{static void Main(string[] args){Person breakingbad = new Person();//使用索引器設(shè)置值breakingbad[3] = "謝耳朵";breakingbad[4] = "潘妮";//使用索引器獲得值for (int i = 0; i < 5; i++){System.Console.WriteLine("元素 #{0} = {1}", i, breakingbad[i]);}System.Console.WriteLine("Press any key to exit.");System.Console.ReadKey();}}}索引器和屬性的比較
1.相同點(diǎn)
1).索引和屬性都不用分配內(nèi)存位置來(lái)存儲(chǔ)。
2).索引和屬性都是為類(lèi)的其它成員提供訪問(wèn)控制的。
- 3).索引和屬性都有g(shù)et訪問(wèn)器和set訪問(wèn)器,它們可以同時(shí)聲明兩個(gè)訪問(wèn)器,也可以只聲明其中一個(gè)。
2.不同點(diǎn)
- 1).屬性通常表示單獨(dú)的數(shù)據(jù)成員,而索引表示多個(gè)數(shù)據(jù)成員。
- 2).屬性既可以聲明為實(shí)例屬性,也可以聲明為靜態(tài)屬性,而索引不能聲明為靜態(tài)的。
- 3).屬性有簡(jiǎn)潔的自動(dòng)實(shí)現(xiàn)屬性,而索引必須聲明完整。
- 4).get訪問(wèn)器:屬性的 get 訪問(wèn)器沒(méi)有參數(shù),索引器的 get 訪問(wèn)器具有與索引器相同的形參表。
- 5).set訪問(wèn)器:屬性的 set 訪問(wèn)器包含隱式 value 參數(shù)。除了值參數(shù)外,索引器的 set 訪問(wèn)器還具有與索引器相同的形參表。
總結(jié)
- 上一篇: ISIC2018比赛经验分享
- 下一篇: 从gPROMS换到c#的路程! 千