c#Singleton模式与静态属性

时间:2016-03-03 14:02:31

标签: c# static singleton

当我尝试使用同一类的2个不同版本时,它们的行为实际上是相同的。

我搜索过但找不到这个问题的满意答案

单例和静态属性之间的区别在于2例,它是关于初始化时间的?我怎么能观察到差异?

编辑:我不问静态类和单例的差异。它们都是非静态的,唯一的区别是,第一个在Instance属性中初始化,第二个直接初始化

public sealed class Singleton
{
    private static Singleton instance;

    private Singleton()
    {
    }

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

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

    private Singleton2()
    {
    }

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

2 个答案:

答案 0 :(得分:1)

你的第一个单例实现不是线程安全的;如果多个线程同时尝试创建单例,则可能最终创建两个实例。你的第二个实现没有这个缺陷。

除此之外,它们的功能相同。

答案 1 :(得分:0)

Singleton类的实例将在Singleton.Instance方法第一次请求时创建。

Singleton2的实例将在其类型的初始化时创建,这可能由多种机制引起。它肯定会在访问Singleton2类

上的任何属性或方法之前创建