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