c#索引器
阿新 • • 發佈:2017-09-09
引用 adk bbb col args -s 值類型 pub pat
1.索引器:C#語言中的類成員,使得對象可以像數組一樣被引用,使程序看起來更直觀,更容易被編寫。
一個簡單的案例:
1 class TestIdx 2 { 3 public string this[int i] 4 { 5 get { 6 return names[i]; 7 } 8 set { 9 names[i] = value; 10 } 11 } 12private string[] names= {"lily","lucy","tom" }; //私有字段names 13 }
1 static void Main(string[] args) 2 { 3 TestIdx tidx = new TestIdx(); 4 string str_name = tidx[0]; //調用get方法,取值 5 tidx[1] = "sam"; //給索引器賦值,其實就是調用set方法 6 Console.ReadKey();7 }
TestIdx 這個類的實例顯然不能直接操作private字段names,可以在類中定義一個索引器,來達到操作names的目的
2.索引器語法:
從以上這個最簡單的案例總結一下索引器的語法: [權限修飾符] 返回值類型 this[參數類型 參數名]
{
get 方法
set方法
}
ps:可能我理解的不夠深,處於封裝的考慮,保護成員變量,存儲集合類對象設置為私有,然後設置訪問他們的方法,那麽把訪問他們的方法也設為私有,我理解不了,pativate類型的索引器有什麽作用,在我看來就是閑的蛋疼。
3.索引器與屬性同為c#的語法糖,這裏做一下比較:
屬性用名稱來標識,名稱隨便取,索引器用this關鍵字來標記;
索引器有參數列表,和一般的方法不同之處在於寫在了[]中...,所以索引器可以重載,屬性當然不可以了;
屬性可以用static修飾,索引器不行,索引器只能通過實例來操作。
需要特別註意的是不光只能通過數字索引,還可以是字符串等類型:
字符串索引案例:
class TestIdx2 { public Dictionary<string, string> dic = new Dictionary<string, string>() { {"a1","aaa"}, {"b1","bbb" }, {"c1","ccc" } }; public string this[string str] { get { return dic[str]; } set { dic[str] = value; } } }
static void Main(string[] args) { TestIdx2 idx2 = new TestIdx2(); string stmp = idx2["a1"]; //get方法,取值 idx2["b1"] = "ccccc"; //set方法,賦值 Console.ReadKey(); }
c#索引器