Iva*_*van 6 c# constructor properties
我有一个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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我的同事通常更喜欢在类构造函数中初始化列表,如下所示:
public class Foo
{
public List<bar> BarList { get; set; }
public Foo()
{
BarList = new List<Bar>();
}
}
Run Code Online (Sandbox Code Playgroud)
这两种情况都BarList无法在初始化之前被访问.由于使用autoproperties,第二个似乎更整洁.第一个似乎是一个更好的选择,因为列表仅在首次使用时初始化.我还应该考虑其他因素吗?这是最好的做法吗?
除了 usrs 的答案之外,还有一个关于这个问题的答案,使用 C# 6.0。
新功能之一是自动实现的属性的初始化程序。你会写:
public class Foo
{
public List<bar> BarList { get; set; } = new List<bar>();
}
Run Code Online (Sandbox Code Playgroud)
另外,看看新的主要构造函数,找到了一篇程序员.stackexchange 文章。
此初始化程序将在对象初始化时调用。在内存消耗/性能方面,它应该等于在构造函数中初始化属性。
如果你需要保存记忆,那么懒惰的策略显然会更好.如果内存使用不重要,那么急切的策略会导致更简单的代码.那么是优选的.
一般来说,消除特殊情况是一件好事.对于内部访问,list字段可以为null并不是一件好事.
请注意,C#6使代码变得更短,更倾向于更短的代码解决方案.
请注意,延迟版本对于并发执行getter而言不是线程安全的.
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |