2015-02-10 42 views
0

首先我做了一類具有這樣的領域:如何在C#中的類中創建一個自動實現的列表屬性?

class Person 
{ 
    public string name; 
    public List<Thing> things = new List<Thing>(); 

    public Person(string name) 
    { 
     this.name = name; 
    } 
} 

,並直接改變了場things類的外部,但後來發現,這是不是最好的做法是類的字段應該是私有並使用公共屬性進行訪問。我決定改變這些領域進入自動實現的屬性,因爲我目前不需要的屬性中的任何驗證:

class Person 
{ 
    public string Name { get; set; } 
    public List<Thing> Things { get; set; } 

    public Person(string name) 
    { 
     this.Name = name; 
    } 
} 

據自動實現屬性的MSDN頁面(https://msdn.microsoft.com/en-us/library/bb384054.aspx),編譯器創建一個私有支持物業的領域。

然而,在一個列表屬性我不知道編譯器是否自動實例列表支持字段,所以我的問題是意志具有列爲自動實現的屬性在第二個例子中的工作上面,或我是否需要實例化列表以及,如果有的話,我應該怎麼做?

+2

是的,你需要實例,並在構造例如 – Andrei 2015-02-10 13:08:30

+0

實例化 - 通常是在構造函數中 – 2015-02-10 13:08:46

+2

此外,你可能想使物業'{獲得;私人設置; }' – sloth 2015-02-10 13:11:16

回答

2

我不知道編譯器是否自動實例列表支持字段

事實並非如此。如果你沒有實例化它,默認情況下它將爲空。

我是否需要實例化這些列表?如果有,我該怎麼做?

您需要自行實例化它。這通常可以在構造函數中完成。 E.g:

public Person(string name) 
{ 
    this.Name = name; 
    this.Things = new List<Thing>(); 
} 
+0

哦,對,當它聲明屬性時,最好在構造函數之外初始化它嗎? – Ruben9922 2015-02-10 15:32:13

+0

當你使用自動實現的屬性時,你不能直接實例化這個列表(儘管這在C#6中是可能的)。所以你要麼必須自己實現屬性(聲明你自己的支持字段並實例化它),或者在構造函數(或另一種方法)中實例化它。我更喜歡自動實現的屬性和構造函數初始化。一個並不比另一個「更好」,這是一個意見問題。 – MAV 2015-02-10 15:43:26

+0

哦,對,是的,這是有道理的 – Ruben9922 2015-02-10 15:48:50

相關問題