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