我正在阅读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; } }
}
答案 0 :(得分:5)
我的问题是,在.NET 4.0上,我应该包含构造函数(我认为它们现在是隐式创建的)。
是的,Fx4或C#4没有变化。
如果您不提供实例构造函数,则编译器会提供 public
没有理由提供静态构造函数。
以下似乎也有效,
重点是var s = new Singleton();
应该不工作。这是要测试的东西。
答案 1 :(得分:1)
除非该类是静态的,否则C#编译器会为没有构造函数的类提供公共默认构造函数,以便启用类实例化。有关更多信息,请参阅静态类和静态类成员。
密封关键字只会使其不可继承。
您可以通过将构造函数设为私有来阻止实例化类。 如果不包含构造函数,则不会遵循单例设计模式。所以基本上,是的,你应该包括那些,如果你想要一个真正的单身人士..
正如hvd的评论指出的那样,你也应该包括其他构造函数。
来源(S): Official MSDND C#