我似乎有一个奇怪的习惯……至少我的同事是这样说的。我们一直在一起做一个小项目。我编写类的方式是(简化示例):
[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 并且该字段仍然为空时初始化任何字段。我认为这将通过不初始化任何未在任何地方使用的属性来减少过载。
ETA:我这样做的原因是我的类有几个属性,它们返回另一个类的实例,而后者又具有更多类的属性,等等。调用顶级类的构造函数随后会调用所有这些类的所有构造函数,但并不总是需要它们。
除了个人偏好之外,是否有反对这种做法的反对意见?
更新:我已经考虑了关于这个问题的许多不同意见,我会坚持我接受的答案。但是,我现在对这个概念有了更好的理解,我能够决定何时使用它,何时不使用它。
缺点:
- 线程安全问题
- 当传递的值为 null 时不遵守“setter”请求
- 微优化
- 异常处理应该在构造函数中进行
- 需要检查类代码中的空值
优点:
- 微优化
- 属性永远不会返回 null
- 延迟或避免加载“重”对象
大多数缺点不适用于我当前的库,但是我必须测试以查看“微优化”是否真的在优化任何东西。
最后更新:
好吧,我改变了答案。我最初的问题是这是否是一个好习惯。我现在确信它不是。也许我仍然会在我当前代码的某些部分使用它,但不是无条件的,也绝对不是一直使用它。所以我会失去我的习惯,在使用它之前考虑一下。感谢大家!