我好像有一个奇怪的习惯……至少我的同事是这样认为的。我们一起完成了一个小项目,我编写类的方式是(简化例子):
[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时才初始化任何字段。我认为这样可以通过不初始化任何未在任何地方使用的属性来减少负荷。
注:我这样做的原因是我的类有几个返回另一个类实例的属性,而该类实例还有更多的类属性,依此类推。调用顶层类的构造函数将随后调用所有这些类的构造函数,而并非始终都需要。
这种做法除了个人喜好之外,还有什么异议吗?
更新:我考虑了许多不同的意见,并坚持我的接受答案。但是,我现在对这个概念有了更好的理解,能够决定何时使用它以及何时不使用。
缺点:
- 线程安全问题
- 当传递的值为null时,未遵守“setter”请求
- 微小优化
- 异常处理应在构造函数中进行
- 需要在类代码中检查null
优点:
- 微小优化
- 属性永远不会返回null
- 延迟或避免加载“重型”对象
大多数缺点不适用于我的当前库,但我需要测试以确定“微小优化”是否实际上正在优化任何内容。
最后更新:
好的,我改变了我的答案。我的最初问题是这是否是一个好习惯。我现在确信它不是。也许我仍然会在我的当前代码的某些部分使用它,但不是无条件地并且绝对不会一直使用它。所以我要放弃这个习惯,在使用它之前考虑一下。谢谢大家!