索引器(Indexer)
索引器容許類或結構的實例按照與數據相同的方式進行索引。索引器相似於屬性,不一樣之處在於它們的訪問器採用參數。因此索引器也被稱爲有參屬性。
示例一: 數組
using System ; 函數
class ArrClass//沒有索引器的類
{
private readonly string name;
public ArrClass(string name)
{
this.name = name;
}
public string Name
{
get{return name;}
}
} this
class IndexClass//帶索引器的類
{
private string [] name = new string [10];
public string this[int index]
{
get{return name[index];}
set{name[index] = value;}
}
//索引器與屬性不一樣的是,這裏沒有屬性名,而是用this表示索引。
//索引的定義與方法不一樣的是,用方括號[],而不是圓括號(),同時索引的定義中沒有方法名,只用this。
//索引的使用像數組,都使用[],但與數組不一樣的是,數組的[]中只能使用整數做下標,而索引的[]中能夠使用各類類型。
//索引也能夠重載,同一個類中的多個索引要求參數列表(簽名)必須不一樣,即:或者參數個數不一樣,或者是參數類型不一樣,或者參數類型的順序不一樣。
}
class Test
{
static void Main()
{
//數組類的使用
ArrClass[] a = new ArrClass[10];
a[0] = new ArrClass ("張三");
a[1] = new ArrClass ("李四");
a[2] = new ArrClass ("王五");
Console.WriteLine (a[0].Name);
Console.WriteLine (a[1].Name);
Console.WriteLine (a[2].Name);
//索引器的使用
IndexClass b = new IndexClass ();
b[0] = "張三";
b[1] = "李四";
b[2] = "王五";
Console.WriteLine (b[0]);
Console.WriteLine (b[1]);
Console.WriteLine (b[2]);
}
} spa
------------------------- 索引
索引器與數組的比較 get
1>索引器的索引值(Index)類型不受限爲整數 string
用來訪問數組的索引值(Index),其類型必定爲整數,然而索引器能夠定義其餘類型的索引值。 it
2>索引器容許重載(Overloading) class
一個類並不限制只可以定義一個索引器,只要索引器的函數簽名不一樣,一個類就能夠擁有不少個索引器,你能夠重載它的功能。 變量
3>索引器不是一個變量
索引和數組不一樣的地方在於,索引器並無直接對應引用數據存儲的地方,而數組則有。索引器有get訪問器與set訪問器,用來指明要讀取或寫入索引器元素時,須要執行的代碼。
---------------------------
索引器與屬性的不一樣點:
標識方式:屬性以名稱來標識;索引器則以函數簽名來標識。
索引器能夠被重載:由於屬性時以名稱標識的,因此不能被重載;索引器是用函數簽名標識的,所以能夠重載。
索引器不能夠聲明爲static:屬性能夠爲static,而索引器永遠屬於實例成員,不能爲static