|
本節(jié)課我們來(lái)學(xué)習(xí)索引器,索引器的功能類(lèi)似于屬性,它也有一對(duì)get和set訪(fǎng)問(wèn)器,只不過(guò)屬性是用來(lái)封裝字段的,而索引器是利用訪(fǎng)問(wèn)器來(lái)有條件的來(lái)控制類(lèi)中的數(shù)組類(lèi)成員如數(shù)組和集合,get和set訪(fǎng)問(wèn)器的用法與屬性一致,這里不做過(guò)多的講解,首先我們定義一個(gè)int類(lèi)型的數(shù)組a,觀察一下索引器的具體語(yǔ)法: int [] a={1,2,3};//類(lèi)中的數(shù)組也應(yīng)該定義為私有變量,對(duì)外只提供索引器進(jìn)行對(duì)數(shù)組的訪(fǎng)問(wèn) public int this[int index] //注意在定義索引器時(shí)要與所封裝的數(shù)組類(lèi)型一致。 } 其中,index作為訪(fǎng)問(wèn)int型數(shù)組的索引值,索引值的數(shù)值類(lèi)型可以是整型,也可以為string類(lèi)型,這主要是取決于索引器所封裝的對(duì)象的類(lèi)型,當(dāng)封裝的對(duì)象是哈希表時(shí),索引值index的數(shù)據(jù)類(lèi)型就可以是string型,即將索引當(dāng)成是哈希表的鍵。this關(guān)鍵字用于定義索引器,value關(guān)鍵字代表由set索引器獲得的值。在使用索引器時(shí)采用“類(lèi)的對(duì)象[索引值]”的方式進(jìn)行對(duì)數(shù)組的訪(fǎng)問(wèn),下面我們來(lái)看一個(gè)簡(jiǎn)單的實(shí)例,在本例中定義了一個(gè)student類(lèi),類(lèi)中有一個(gè)存放五名學(xué)生成績(jī)的數(shù)組CJ,同時(shí)定義了一個(gè)索引器目的是封裝數(shù)組CJ,同時(shí)在第三方類(lèi)中使用索引器的set訪(fǎng)問(wèn)器對(duì)給數(shù)組CJ賦值起到有條件的限制。 1 //定義了一個(gè)學(xué)生類(lèi),其中CJ數(shù)組記錄了學(xué)生的成績(jī)2 class Student3 ![]() {4 //數(shù)組CJ定義了五個(gè)學(xué)生的成績(jī)。5 ![]() int[] CJ = { 81, 72, 63, 64, 95 };6 //定義一個(gè)索引器供外部類(lèi)訪(fǎng)問(wèn)CJ數(shù)組7 public int this[int Xh]8 ![]() {9 get10 ![]() { //返回索引值為學(xué)號(hào)-1的數(shù)組CJ的元素值,即學(xué)生的成績(jī)11 return CJ[Xh - 1];12 }13 //使用set訪(fǎng)問(wèn)器,限制不符合條件的數(shù)值不許給數(shù)組CJ賦值14 set15 ![]() { //當(dāng)外部給數(shù)組的元素賦值時(shí),先判斷值的條件,滿(mǎn)足條件時(shí),將value賦值給索引值為學(xué)號(hào)-1的成績(jī)數(shù)組CJ的元素。16 if (value > 100 || value < 0)17 Console.WriteLine("學(xué)生的分?jǐn)?shù)應(yīng)在0到100之間");18 else19 CJ[Xh - 1] = value;20 }21 }22 }23 class Program24 ![]() {25 static void Main(string[] args)26 ![]() {27 28 Console.Write("請(qǐng)輸入查詢(xún)成績(jī)的學(xué)生學(xué)號(hào)1-5號(hào):");29 int xh = int.Parse(Console.ReadLine());30 ![]() 31 //創(chuàng)建一個(gè)student類(lèi)的實(shí)例對(duì)象class1班級(jí)1.32 Student class1 = new Student();33 //使用“對(duì)象[索引值]”的方式得到student類(lèi)中數(shù)組CJ的元素值。34 Console.WriteLine(class1[xh]);35 ![]() 36 //如果想給數(shù)組的元素賦值時(shí),就使用到了set訪(fǎng)問(wèn)器,先對(duì)xgcj進(jìn)行判斷,再賦值。37 Console.Write("請(qǐng)輸入修改成績(jī)的學(xué)生學(xué)號(hào)1-5號(hào):");38 int xgxh = int.Parse(Console.ReadLine());39 Console.Write("請(qǐng)輸入修改的成績(jī):");40 int xgcj = int.Parse(Console.ReadLine());41 42 //賦值也使用對(duì)象【索引值】的方式43 class1 [xgxh ]=xgcj;44 Console.WriteLine("修改后的學(xué)生成績(jī)?yōu)椋?/span>"+ class1[xgxh]);45 ![]() 46 Console.WriteLine("***********************************");47 48 //當(dāng)給數(shù)組中第4個(gè)元素不符合條件的值時(shí),就會(huì)執(zhí)行set語(yǔ)句中的if的語(yǔ)句塊,49 //即提示出錯(cuò)誤提示。50 class1[4] = 102;51 52 }53 ![]()
請(qǐng)同學(xué)們注意代碼第43行,要記住當(dāng)一個(gè)類(lèi)定義了索引器后,想訪(fǎng)問(wèn)數(shù)組的值,就可以把類(lèi)的對(duì)象名想像成數(shù)組名,像數(shù)組通過(guò)索引賦值和取值一樣,這樣能更有助于同學(xué)們記住索引器的用法。下面我們來(lái)看一下用索引器封裝哈希表的用法實(shí)例: 1 //定義了一個(gè)學(xué)生類(lèi),其中CJ數(shù)組記錄了學(xué)生的成績(jī)2 class Student3 ![]() {4 //數(shù)組CJ定義了五個(gè)學(xué)生的成績(jī)。5 Hashtable CJ = new Hashtable();6 ![]() 7 ![]() 8 //定義一個(gè)索引器供外部類(lèi)訪(fǎng)問(wèn)CJ,學(xué)生姓名為索引值9 public string this[string Name]10 ![]() {11 get12 ![]() { //通過(guò)傳入的哈希表的鍵,得到值。13 return CJ[Name].ToString ();14 }15 16 set17 ![]() { 18 //給哈希表賦值的兩種方式。19 CJ[Name] = value;20 // CJ.Add(Name,value );21 }22 }23 }24 class Program25 ![]() {26 static void Main(string[] args)27 ![]() {28 29 Console.Write("請(qǐng)輸入學(xué)生的姓名:");30 string name = Console.ReadLine();31 Console.Write("請(qǐng)輸入此學(xué)生的成績(jī):");32 string cj = Console.ReadLine();33 ![]() 34 //創(chuàng)建一個(gè)student類(lèi)的實(shí)例對(duì)象class1班級(jí)1.35 Student class1 = new Student();36 37 //賦值也使用對(duì)象【索引值】的方式38 class1 [name]=cj;39 ![]() 40 Console.WriteLine("姓名為{0}的學(xué)生成績(jī)?yōu)椋簕1}",name,class1 [name]);41 ![]() 42 43 }
索引器的具體用法希望通過(guò)這兩個(gè)實(shí)例同學(xué)們能理解好并掌握,當(dāng)然索引器還有更加復(fù)雜的用法,同學(xué)們可以在日后隨著學(xué)習(xí)的深入繼續(xù)深化。 |
|
|