在C#中实现单例模式的有效方法是什么?

时间:2013-12-04 20:08:51

标签: c# design-patterns singleton

当我遇到类似的Java问题时,出现了这个问题。 What is an efficient way to implement a singleton pattern in Java?

我们可以在C#中实现类似的东西吗?

4 个答案:

答案 0 :(得分:4)

您必须已经通过Jon Skeet检查了Implementing the Singleton Pattern in C#

  

然而,所有这些实现共享四个共同特征:

     
      
  • 单个构造函数,它是私有且无参数的。这可以防止其他> >实例化它的类(这将违反模式)。请注意,它还可以防止子类化 - 如果一个单例可以被子类化一次,它可以被子类化> gt;两次,并且如果每个子类都可以创建一个实例,则违反该模式。如果您需要基本类型的单个实例,则可以使用工厂模式,但直到运行时才能知道确切的类型。
  •   
  • 课程是密封的。严格来说,由于上述原因,这是不必要的,但可能有助于JIT更好地优化事物。
  •   
  • 一个静态变量,用于保存对单个已创建实例的引用(如果有)。
  •   
  • 公共静态意味着获取对单个已创建实例的引用,必要时创建一个实例。
  •   
public class Singleton 
{
    static readonly Singleton _instance = new Singleton();

    static Singleton() { }

    private Singleton() { }

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

答案 1 :(得分:1)

实施一个

的常用方法
public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();

    private Singleton() {}
    static Singleton() {}

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

答案 2 :(得分:1)

public class Singleton
 {
        private static Singleton instance = null;

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

答案 3 :(得分:0)

我找到了一些给你:

Jon Skeet's

post

还有this one

在一天结束时,这些都是非常主观的,所以你需要做最适合你的事情以及你想要完成的事情。

相关问题