C# Class Property With Parameter (實作可代入參數的類別屬性)
寫多了 Class Library 最近又遇到一件很困擾的事情,就是類別 (Class) 的屬性 (Property) 是不是可以帶入參數 (Parameter) 呢? 依據代入的參數的不同,就可以得到不同結果的屬性值。以下就建立 Person 類別,並建立 NickNames 屬性來示範:
(1) 建立 NickName 類別,建立 string [] 資料型態的私有欄位 _nicknames,限定 index 長度。
(2) 實作同欄位資類別 string 的匿名的屬性,實作 get 與 set 動作,控制代入的 index 都能確正確讀寫 _nicknames 字串陣列。
1: public class NickName
   2:  {      3: private string[] _nickNames = new string[3];
   4:         5: public string this[int index]
   6:      {         7:          get         8:          {      9: if(index >=0 || index < _nickNames.Length)
  10:              {      11: return _nickNames[index];
  12:              }      13: return string.Empty;
  14:          }        15:          set        16:          {      17: if (index >= 0 || index < _nickNames.Length)
  18:              {      19: _nickNames[index] = value;
  20:              }        21:          }        22:      }        23:  }
(3) 實作 Person 類別,先依一般性原則建立自己的屬性,如 string 型態的 Name 。
(4) 再宣告 NickName 類別型態的 NickNames 的屬性,這樣就算完成可代參數的屬性囉。
1: public class Person
   2:  {      3: public string Name { get; set; }
4: public NickName NickNames = new NickName();
   5:  }
使用範例:
1: // 宣告 Person 類別物件變數 person
2: Person person = new Person();
3: // 設定一般 Name 屬性,無法帶入參數
4: person.Name = "chhuang";
5: // 設定可代入參數的 NickNames 屬性
6: person.NickNames[0] = "Eric";
7: person.NickNames[1] = "Rick";
   8:         9: // 讀取一般性 Name 屬性
  10:  Console.WriteLine(person.Name);      11: // 設定可代入參數的 NickNames 屬性
  12:  Console.WriteLine(person.NickNames[0]);        13:  Console.WriteLine(person.NickNames[1]);
輸出結果:
   1:  chhuang         2:  Eric         3:  Rick