C#學習日記28---索引器、重載索引器
來源:程序員人生 發布時間:2016-05-04 15:36:10 閱讀次數:2418次
索引器允許類或結構的實例就像數組1樣進行索引,當您為1個類定義1個索引器時,這個類就會像1個數組1樣,您可使用數組訪問符 '[]' 對該類的實例進行訪問.. 索引器與
屬性 類似,但是索引器要采取參數,(也能夠這么認為,索引器是1個類的屬性,一樣也是通過訪問器(1種特殊的方法) 實現的)
為了更清楚1點,還是舉個例子吧, 大學是人生中最悠閑的時光,同學們可以做許多自己曾想做而由于種種緣由沒有做的事,逃課很明顯正是其中之1..為了制止逃課的行動,每次上課的時候老師都要點名或是點學號,我是4班的,老師喜歡點學號,"4班1號" 然后下面大聲答"到……",“4班2號”,“到”,“4班3號”......
"3號。。3號同學。。",“老師HC666今天肚子疼上醫院了”(中國好室友阿^_^),“哦,4號”..... 老師點名就是對4班的1個索引。
如果將class4看做是由Classes類實例化的1個對象,class[1]就是對1號同學的索引,(想想數組就明白了)那怎樣實現呢?
定義索引器:
上面也說了,索引器與屬性類似,自然也少不了get,set訪問器了,索引器也是類的成員,自然也得在類里面定義了,以下:
public 返回值類型 this[參數類型 參數]
{
get { return 參數指定的值; } //get訪問器
set { /*設置參數指定的值 */
} //set訪問器
}
索引器的實例:
我們將上面的例子代碼化,以下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test1
{//定義1個能被索引的類
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+"號 "+class4[j]);
}
}
}
}
結果:

重載索引器:
上面的程序中,我們實現了通過學號索引出該學生姓名,那怎樣實現通過姓名索引出學號呢?我們將索引看做是1個特殊的方法,方法可以利用重載實現不同的參數相同的功能,那末索引器自然也能夠重載。用法與方法重載類似,(查看方法重載點這里),我們還是接著上面的例子,這次要滿足使用姓名索引出學號:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test1
{//定義1個能被索引的類
class Classes
{//對類的索引實質是對類中數組的索引
public string[] StudentName=new string[6];
//定義索引器
public string this[int ID]
{
get { return StudentName[ID]; }
set { StudentName[ID] = value; } //set訪問器自帶value參數
}
//重載索引器參數設為string類型
public uint this[string name]
{
get
{ //找到與name匹配的學號
uint index=1;
while (StudentName[index] != name && index < 6)
{ index++; }
return index;
}
set { }
}
}
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+"號 "+class4[j]);
}
//通過姓名索引出學號
for (int k = 1; k < 6; k++)
{
string name="HC"+k;
Console.WriteLine(name+" "+class4[name]+"號");//對照上面用法1樣參數不1樣
}
}
}
}
結果:

在上面中我們說了當1個類定義了索引器就能夠將這個類當作數組1樣看待,那在學習
數組 的時候知道,數組有多維度的,索引器所在的類呢??我們遍歷數組用的foreach遍歷語句對這個類也能用嗎??我下1篇再作介紹吧!!(由于學校要短電了……)希望您繼續支持HC666^_^
您的建議與評論是我完善自我的動力,感謝您的瀏覽,有毛病的地方歡迎指出來或私信我^_^
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈