似乎我有一个奇怪的习惯……至少根据我的同事说。我们一直在一起做一个小项目。我编写类的方式是(简化示例):
[Serializable()]
public class Foo
{
public Foo()
{ }
private Bar _bar;
public Bar Bar
{
get
{
if (_bar == null)
_bar = new Bar();
return _bar;
}
set { _bar = value; }
}
}
因此,基本上,我只在调用getter且该字段仍为null时才初始化任何字段。我认为这可以通过不初始化任何地方都没有使用过的属性来减少过载。
ETA:之所以这样做,是因为我的班级有几个属性,这些属性返回另一个班级的实例,而后者又具有包含更多班级的属性,依此类推。当并非总是需要所有顶级类时,调用顶级类的构造函数将随后调用所有这些类的所有构造函数。
除了个人喜好之外,还有其他反对这种做法的反对意见吗?
更新:关于这个问题,我已经考虑了许多不同的观点,我将支持我接受的答案。但是,我现在对这个概念有了更好的理解,我能够决定何时使用它,何时不使用它。
缺点:
- 线程安全问题
- 当传递的值为null时,不服从“ setter”请求
- 微观优化
- 异常处理应在构造函数中进行
- 需要在类的代码中检查null
优点:
- 微观优化
- 属性永远不会返回null
- 延迟或避免加载“重”对象
大多数缺点不适用于我当前的库,但是我必须进行测试以查看“微优化”是否真的在优化任何东西。
最后更新:
好吧,我改变了答案。我最初的问题是这是否是一个好习惯。我现在坚信事实并非如此。也许我仍会在当前代码的某些部分中使用它,但不是无条件的,而且肯定不是一直如此。因此,我将失去习惯,在使用它之前先考虑一下。感谢大家!