C# Class Property With Parameter (實作可代入參數的類別屬性)

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