C#单例类

兼顾线程安全常用以下三种写法:

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    // 显式静态构造器告诉C#编译器
    // 不要将类型标记为BeforeFieldInit
     // Explicit static constructor to tell C# compiler 
// not to mark type as beforefieldinit
    static Singleton()
    {
    }

    private Singleton()
    {
    }

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


 

public sealed class Singleton
{
    private static readonly Lazy<Singleton> lazy =
        new Lazy<Singleton>(() => new Singleton());
    
    public static Singleton Instance { get { return lazy.Value; } }

    private Singleton()
    {
    }
}

 

public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
}

Implementing the Singleton Pattern in C# (csharpindepth.com)

Articles (csharpindepth.com)

以上来自C# in Depth 作者的博客资源

posted @ 2023-04-22 11:03  love/coder  阅读(20)  评论(0编辑  收藏  举报