这是C#的有效,懒惰,线程安全的Singleton实现吗?

时间:2010-04-11 00:05:28

标签: c# multithreading singleton thread-safety

我实现了像这样的Singleton模式:

public sealed class MyClass {

    ...

    public static MyClass Instance {
        get { return SingletonHolder.instance; }
    }

    ...

    static class SingletonHolder {
        public static MyClass instance = new MyClass ();
    }
}

从谷歌搜索C#Singleton实现,似乎这不是在C#中做事的常用方法。我发现了一个类似的实现,但SingletonHolder类不是静态的,并且包含一个显式(空)静态构造函数。

这是一种有效,懒惰,线程安全的方式来实现Singleton模式吗?或者有什么我想念的东西?

1 个答案:

答案 0 :(得分:6)

Jon Skeet编写了一篇关于在C#中实现Singleton模式的article

延迟实现是版本5:

public sealed class Singleton
{
    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            return Nested.instance;
        }
    }

    class Nested
    {
        // Explicit static constructor to tell C# compiler
        // not to mark type as beforefieldinit
        static Nested()
        {
        }

        internal static readonly Singleton instance = new Singleton();
    }
}

特别注意,即使它是空的,你也必须显式地声明一个构造函数,以使它成为私有的。