到目前为止,在实现单例模式时,我使用了以下两种变体之一:
public class ClassX
{
private static ClassX _instance1;
public static ClassX Instance1 {
get {
if (_instance1 == null) {
_instance1 = new ClassX();
}
return _instance1;
}
}
public static readonly ClassX Instance2 = new ClassX();
}
在第一个版本中,创建实例时很明显:首先调用公共属性。
第二个我认为是一个方便的简写,如果可能的话(例如,该类不需要非常量参数),我真的不需要为确切知道实例的创建时间而烦恼。并且没有,假设编译器会相应地跟踪依赖关系......
但事实证明Instance2
创建的顺序和时间不同,具体取决于构建:调试或发布。
我想/假设它与编译器对这两种情况的优化有关,但我想知道,如果有人能够对这个问题有更多的了解。
并且:编译器可以被教导同时处理(关于这个问题)吗?我应该总是使用第一种语法吗?或者更多地了解Lazy<T>
?
谢谢!