我有一个对象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)所示。 –