c# – 在构造函数中初始化属性内部的列表?
发布时间:2020-12-15 08:21:08 所属栏目:百科 来源:网络整理
导读:我有一个由属性公开的List的对象.我通常在属性getter中初始化我的列表,如下所示: public class Foo{ private Listbar _barList; public Listbar { get { if(_barList == null) { _barList = new ListBar() } return _barList; } set { _barList = value; }
我有一个由属性公开的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在初始化之前被访问.由于使用autoproperties,第二个似乎更整洁.第一个似乎是一个更好的选择,因为列表仅在首次使用时初始化.我还应该考虑其他因素吗?这是最好的做法吗? 解决方法
如果你需要保存记忆,那么懒惰的策略显然会更好.如果内存使用不重要,那么急切的策略会导致更简单的代码.那么是优选的.
一般来说,消除特殊情况是一件好事.对于内部访问,list字段可以为null并不是一件好事. 请注意,C#6使代码变得更短,更倾向于更短的代码解决方案. 请注意,延迟版本对于并发执行getter而言不是线程安全的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |