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

Mat*_*hew 5 c# singleton multithreading thread-safety

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

public sealed class MyClass {

    ...

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

    ...

    static class SingletonHolder {
        public static MyClass instance = new MyClass ();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

这是实现Singleton模式的有效,懒惰,线程安全的方法吗?还是有什么我想念的?

Mar*_*ers 6

Jon Skeet撰写了一篇关于在C#中实现Singleton模式的文章.

懒惰的实现是版本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();
    }
}
Run Code Online (Sandbox Code Playgroud)

请特别注意,即使它是空的,您也必须显式声明构造函数,以使其成为私有.