我有一個對象List<>
由屬性暴露。我一般初始化屬性getter內我的名單如下:在構造函數中初始化屬性內的列表?
public class Foo
{
private List<bar> _barList;
public List<bar>
{
get
{
if(_barList == null)
{
_barList = new List<Bar>()
}
return _barList;
}
set
{
_barList = value;
}
}
public Foo()
{
}
}
然而,我的同事們一般喜歡在類的構造函數初始化列表如下:
public class Foo
{
public List<bar> BarList { get; set; }
public Foo()
{
BarList = new List<Bar>();
}
}
兩種情況防止BarList
從之前被訪問它被初始化。由於使用自動屬性,第二個看起來更加整齊。第一個看起來好像是一個更好的選擇,因爲這個列表只在第一次使用時才被初始化。我應該考慮其他因素嗎?對此有最佳做法嗎?
重要的是確保你班級的狀態有效。這兩種方法在外部產生相同的結果,但在內部,您的惰性初始化'_barList'可能爲null,而當有人試圖在類中使用時,構造函數初始化'BarList'不會爲null。那麼,如果你開始在方程中引入多線程行爲,外部結果並不完全相同。 –
這真的是「急切加載」與「懶加載」方法。 –
在這種情況下,它基本上是一種風格(和意見,雖然)的問題。在c#6.0中,你有另一種初始化自動實現的屬性的方法,正如[這個SO回答](http://stackoverflow.com/a/40754/1389444)所示。 –