【问题标题】:Static constructor in Singleton design pattern单例设计模式中的静态构造函数
【发布时间】:2014-11-07 15:50:26
【问题描述】:

在 MSDN 上,我发现了两种创建单例类的方法:

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

 public sealed class Singleton {
   private static readonly Singleton instance = new Singleton();
   private Singleton(){}
   public static Singleton Instance {
      get { return instance; }
   }
}

我的问题是:我们可以只使用一个静态构造函数,在第一次使用之前为我们生成这个对象吗?

【问题讨论】:

标签: c# design-patterns singleton static-constructor


【解决方案1】:

你可以使用静态构造函数,当然。我不知道您为什么要使用它而不是仅使用您展示的第二个示例,但您当然可以。它在功能上与您的第二个示例相同,但需要更多输入才能到达那里。

请注意,如果从多个线程访问属性,则无法安全地使用您的第一个示例,而第二个示例是安全的。您的第一个示例需要使用lock 或其他同步机制来防止创建多个实例的可能性。

【讨论】:

  • 只是怕不完全相同
  • @user3616181 静态字段的初始化器被移到静态构造函数中,在幕后。
  • 还有一个问题:为什么在第二种方法中,我们将单例实例声明为只读,而我们的属性只有 getter?
  • @user3616181 你当然不必这样做。无论哪种方式,代码都可以工作。这主要是对读者的意图信号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多