关于单例模式的一些疑问
看到一管关于单例模式的文章,感觉写的相当不错,链接:http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html
其最后一段“饿汉模式”的代码如下:
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton()
{
}
public static Singleton GetInstance()
{
return instance;
}
}
原文中提到:
“readonly关键字可以跟static一起使用,用于指定该常量是类别级的,它的初始化交由静态构造函数实现,并可以在运行时编译。在这种模式下,无需自己解决线程安全性问题,CLR会给我们解决。由此可以看到这个类被加载时,会自动实例化这个类,而不用在第一次调用GetInstance()后才实例化出唯一的单例对象。”
现在的问题是如果去掉readonly单例模式还能不能正常使用?如果能正常使用,跟加readonly的模式有何区别?
C#
readonly
单例
------解决方案--------------------lz这个也算单例,把readonly去掉不影响使用
加readonly是防止你在自身类(即Singleton )内部函数里修改它
------解决方案--------------------
CLR via C#详细描述了这个问题,而且相比使用DCL(双重检查锁),贪婪加载(你所谓的饿汉模式)的Singleton更安全。