0

可能重复:
Jon Skeet 的 Singleton 澄清

我正在阅读单身人士,现在(也感谢 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; } }
}
4

2 回答 2

5

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

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

以下似乎也同样有效,

关键是那 var s = new Singleton(); 应该工作。这就是要测试的东西。

于 2012-09-25T11:21:48.863 回答
1

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

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

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

正如 hvd 的评论所指出的,您还应该包括其他构造函数。

来源: 官方 MSDND C#

于 2012-09-25T11:25:07.553 回答