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

Dav*_*ave 0 c# singleton design-patterns

可能重复:
Jon Skeet的单身人士澄清

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

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

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

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

   public static Singleton Instance { get { return instance; } }
}
Run Code Online (Sandbox Code Playgroud)

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

以下似乎也可以正常工作,但我担心它只适用于我设计的测试示例.

public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();    
    public static Singleton Instance { get { return instance; } }
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 5

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

是的,Fx4或C#4没有变化.
如果你不提供实例构造函数,那么编译器提供一个公共构造函数.
没有理由提供静态构造函数.

以下似乎也可行,

问题的关键是, var s = new Singleton(); 应该工作.这是要测试的东西.

  • 包含静态构造函数时存在细微差别.包括它意味着单例在首次使用时构造*正好*.不包括它允许它稍早构造,允许一些优化,例如然后在循环中访问单例. (2认同)