在静态构造函数中初始化单例实例

时间:2014-07-03 21:57:01

标签: c# singleton lazy-evaluation

我想实现简单的Singleton,经过一些调查后,工作正常。我使用一个简单的控制台应用程序测试它,但如果其他人可以评论它将有所帮助。我之所以怀疑是因为Singleton的新实例是在静态构造函数中创建的,并且不确定它是否有任何副作用。

 sealed class SingletonEx
{
    public static readonly SingletonEx Instance;

    static SingletonEx()
    {
        if (null == Instance)
        {
            Instance = new SingletonEx();

        }
    }
    private SingletonEx() { }


}

如果你很好奇,我发现http://csharpindepth.com/Articles/General/Singleton.aspx对这个主题很有帮助。

1 个答案:

答案 0 :(得分:0)

这不是静态构造函数的典型用法,尽管可以这样做。副作用是构造函数在第一次使用之前运行任何SingletonEx实例将在您的代码中使用。拥有一个静态构造函数不会对" Singleton"行为。但是,要注意启动将在另一个阶段发生,而不是通常情况下静止。

我担心以下几行:
public static readonly SingletonEx Instance;
这是你的问题:
public - 表示可以在类外部进行更改。因为Singleton实例是由私有静态成员变量引用的,所以实例化不会发生,直到对Instance属性的调用首次引用该类。因此,此解决方案实现了lazy instantiation属性的一种形式,如Singleton的Design Patterns形式。当实施设计模式尽可能遵循它的设计时 readonly - 也不应该在这里。它通常是可编辑的,除非你有充分的理由。