final static会自动使用lazy instantiation吗?

时间:2011-05-11 01:52:11

标签: c# java static singleton final

http://www.javaworld.com/javaworld/jw-04-2003/jw-0425-designpatterns.html?page=5处的页面代码如下:

public final static Singleton INSTANCE = new Singleton();

自动使用延迟实例化。

我想验证是否

1)所有编译器都这样做,或者编译器可以自由地做任何想做的事情

2)由于c#没有“final”关键字,将其转换为c#的最佳方式是什么(同时它也应该自动使用lazy instantiation)

1 个答案:

答案 0 :(得分:3)

是。保证静态初始化程序在您能够访问INSTANCE之前运行。这种方法有两个不利因素:

  1. 如果在Singleton的构造中发生错误,则错误调试有点困难(“初始化程序中的错误”)。
  2. 首次使用该类时,该对象将被实例化。如果您执行了锁定方法,则在需要之前不会对其进行实例化。但是,由于该示例是一个单例,那么这不是所有的问题,但它可能会拖拽其他地方未使用但又懒惰的实例化代码 not < / em>单身人士。
  3. C#的翻译为readonly,而不是final

    在我看来,这仍然比次要方法(同步/锁定,在静态getter中检查实例化)更受欢迎,因为它不需要任何同步代码,这更快,更容易阅读,同样容易使用