1. 程式人生 > >c#索引器

c#索引器

引用 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         }
12
private 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#索引器