日期:2014-05-17  浏览次数:21085 次

关于单例模式的一些疑问
看到一管关于单例模式的文章,感觉写的相当不错,链接: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 )内部函数里修改它
------解决方案--------------------
引用:
引用:这个是单例模式,有没有readonly无所谓。
另外二楼说的线程安全问题实际上是不存在的,因为静态构造器由CLR在第一次加载该类型时调用,CLR能够保证这个操作是线程安全的。
你好,可不可以提供一些关于CLR能够保证此操作线程安全的更加详细的资料呢,想深入了解一下,感激不尽


CLR via C#详细描述了这个问题,而且相比使用DCL(双重检查锁),贪婪加载(你所谓的饿汉模式)的Singleton更安全。