始终返回相同实例的类

时间:2012-05-11 13:39:59

标签: c# oop

如何在C#中编写一个只返回对象的“相同”实例的类?这实际上是单身还是不同? “有效Java第二次添加”一书中提到了这一点。

我使用C#4.0(没有技术障碍)。

3 个答案:

答案 0 :(得分:4)

是的,这是一个Singleton模式。您将根据我们自己的Jon Skeet的C#实现here找到一个很好的讨论。

答案 1 :(得分:1)

如果您的Singleton对象创建起来很昂贵,但每次运行应用程序时都不使用它,请考虑使用Lazy。

public sealed class LazySingleton
{
    private readonly static Lazy<LazySingleton> instance = 
        new Lazy<LazySingleton>(() => new LazySingleton() );

    private LazySingleton() { }

    public static LazySingleton Instance
    {
        get { return instance.Value; }
    }
}

答案 2 :(得分:0)

using System;

namespace DesignPatterns
{
    public sealed class Singleton
    {
        private static volatile Singleton instance = null;

        private Singleton() { }

        public static Singleton Instance
        {
            get
            {
                if (instance == null)
                   Interlocked.CompareExchange(ref instance, new Singleton(), null);

                return instance;
            }
        }
    }
}