在C#中定义单例是正确的吗?

时间:2015-03-21 19:02:32

标签: c#

class MyClass
{
    private MyClass(){}

    private static MyClass instance;

    public static MyClass Instance
    {
       get
       {
          return instance=instance??new MyClass();
       }
    }
}

1 个答案:

答案 0 :(得分:5)

我个人认为singleton is an anti-pattern

那说:

您的代码不安全,因为

return instance = instance ?? new MyClass();

不是原子的。

Lazy<T>负责处理有关单例类创建的许多问题。

所以:

public class MyClass
{
    public static MyClass Instance
    {
        get
        {
            return instanceLazy.Value;
        }
    }

    private static Lazy<MyClass> instanceLazy = 
        new Lazy<MyClass>(() => new MyClass());

    private MyClass()
    {
    }
}