索引器允許類別或結構的實例就像數組一樣進行索引,當您為一個類別定義一個索引器時,這個類別就會像一個數組一樣,您可以使用數組訪問符'[]' 對該類的實例進行存取.. 索引器與 屬性 類似,但是索引器要採用參數,(也可以這麼認為,索引器是一個類別的屬性,同樣也是透過存取器(一種特殊的方法) 實現的)
為了更清楚一點,還是舉個例子吧, 大學是人生中最悠閒的時光,同學們可以做許多自己曾經想做而因為種種原因沒有做的事,逃課很明顯正是其中之一..為了製止逃課的行為,每次上課的時候老師都要點名或是點學號,我是4班的,老師喜歡點學號,"4班1號" 然後下面大聲答"到…",「4班2號”,“到”,“4班3號”...... "3號。 ,「哦,4號」..... 老師點名就是4班的一個索引。
如果將class4看作是由Classes類別實例化的一個對象,class[1]就是對1號同學的索引,(想一想數組就明白了)那怎麼實現呢?
定義索引器:
上面也說了,索引器與屬性類似,自然也少不了get,set訪問器了,索引器也是類的成員,自然也得在類裡面定義了,如下:
reee 索引器的實例: 我們將上面的範例程式碼化,如下:public 返回值类型 this[参数类型 参数] { get { return 参数指定的值; } //get访问器 set { /*设置参数指定的值 */ } //set访问器 }
了透過學號索引出該學生姓名,那怎麼實現透過姓名索引出學號?我們將索引視為一個特殊的方法,方法可以利用重載實現不同的參數相同的功能,那麼索引器自然也可以重載。用法與方法重載類似,(查看方法重載點這裡),我們還是接著上面的例子,這次要滿足使用姓名索引出學號:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义一个能被索引的类 class Classes {//对类的索引实质是对类中数组的索引 public string[] StudentName=new string[6]; //定义索引器 public string this[int ID] { get { return StudentName[ID]; } set { StudentName[ID] = value; } //set访问器自带value参数 } } class Program { static void Main(string[] args) { Classes class4 = new Classes(); //索引写入 for (int i = 1; i < 6; i++) { class4[i] = "HC"+i; } //索引读出 for (int j = 1; j < 6; j++) { Console.WriteLine(j+"号\t"+class4[j]); } } } }
結果:
在上面中我們說了當一個類別定義了索引器就可以將這個類別當作數組一樣看待,那在學習 數組 的時候知道,數組有多維度的,索引器所在的類別呢? ?我們遍歷數組用的foreach遍歷語句對這個類別也能用嗎? ?我下一篇再作介紹吧! ! (因為學校要短電了…)希望您繼續支持HC666^_^
以上就是C#學習日記28---索引器、重載索引器的內容,更多相關內容請關注PHP中文網(www .php.cn)!