C# - Singleton - 我需要一个构造函数吗?

时间:2012-09-25 11:20:00

标签: c# design-patterns singleton

  

可能重复:
  Singleton by Jon Skeet clarification

我正在阅读Singletons,现在(也感谢SO)非常了解。

我的实现(应该是教科书)看起来像

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

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

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

我的问题是,在.NET 4.0上,我应该包含构造函数(我认为私有ctor是隐式创建的 - 但静态(可疑)是怎样的。)

以下似乎同样有效,但我担心它只适用于我设计的测试示例。

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

2 个答案:

答案 0 :(得分:5)

  

我的问题是,在.NET 4.0上,我应该包含构造函数(我认为它们现在是隐式创建的)。

是的,Fx4或C#4没有变化。
如果您不提供实例构造函数,则编译器会提供 public 没有理由提供静态构造函数。

  

以下似乎也有效,

重点是var s = new Singleton();应该工作。这是要测试的东西。

答案 1 :(得分:1)

  

除非该类是静态的,否则C#编译器会为没有构造函数的类提供公共默认构造函数,以便启用类实例化。有关更多信息,请参阅静态类和静态类成员。

密封关键字只会使其不可继承。

您可以通过将构造函数设为私有来阻止实例化类。 如果不包含构造函数,则不会遵循单例设计模式。所以基本上,是的,你应该包括那些,如果你想要一个真正的单身人士..

正如hvd的评论指出的那样,你也应该包括其他构造函数。

来源(S): Official MSDND C#