與數(shù)組有什么聯(lián)系和區(qū)別?
1、索引器的定義
C#中的類成員可以是任意類型,包括數(shù)組和集合。當(dāng)一個(gè)類包含了數(shù)組和集合成員時(shí),索引器將大大簡(jiǎn)化對(duì)數(shù)組或集合成員的存取操作。
定義索引器的方式與定義屬性有些類似,其一般形式如下:
[修飾符] 數(shù)據(jù)類型 this[索引類型 index]
{
get{//獲得屬性的代碼}
set{ //設(shè)置屬性的代碼}
}
修飾符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern.
數(shù)據(jù)類型是表示將要存取的數(shù)組或集合元素的類型。
索引器類型表示該索引器使用哪一類型的索引來存取數(shù)組或集合元素,可以是整數(shù),可以是字符串;this表示操作本對(duì)象的數(shù)組或集合成員,可以簡(jiǎn)單把它理解成索引器的名字,因此索引器不能具有用戶定義的名稱。 例如:
class Z
{
//可容納100個(gè)整數(shù)的整數(shù)集
private long[] arr = new long[100];
//聲明索引器
public long this[int index]
{
get
{ //檢查索引范圍
if (index < 0 || index >= 100)
{
return 0;
}
else
{
return arr[index];
}
}
set
{
if (!(index < 0 || index >= 100))
{
arr[index] = value;
}
}
}
2、索引器的使用通過索引器可以存取類的實(shí)例的數(shù)組成員,操作方法和數(shù)組相似,一般形式如下:對(duì)象名[索引]
其中索引的數(shù)據(jù)類型必須與索引器的索引類型相同。例如:
Z z=new z();
z[0]=100;
z[1]=101;
Console.WriteLine(z[0]);
//表示先創(chuàng)建一個(gè)對(duì)象z,再通過索引來引用該對(duì)象中的數(shù)組元素。
C#中并不將索引器的類型限制為整數(shù)。例如,可以對(duì)索引器使用字符串。通過搜索集合內(nèi)的字符串并返回相應(yīng)的值,可以實(shí)現(xiàn)此類的索引器。由于訪問器可以被重載,字符串和整數(shù)版本可以共存。
class DayCollection
{
string[] days={"Sun","Mon","Tues","Wed","Thurs","Fri","Sat"};
private int GetDay(string testDay)
{
int i=0;
foreach(string day in days)
{
if(day==testDay)
return i;
i++;
}
return -1;
}
public int this[string day]
{
get{return (GetDay(day))}
}
}
static void Main(string[] args)
{
DayCollection week=new DayCollection();
Console.WriteLine("Fri:{0}",week["Fri"]);
Console.WriteLine("ABC:{0}",week["ABC"]);
}