防止使用默认的构造函数

有没有办法阻止使用默认的构造函数?

所有我能想到的是抛出一个exception,但我想要的东西,导致编译时错误。

  • 如果这个类中的所有东西都是静态的,那就考虑把它变成静态类。 这样,你根本就不会得到构造函数。
  • 如果你想要一个没有参数的构造函数,但是你不希望它是公开的,那么明确地声明它并使之成为私有的(或内部的)
  • 如果你不想要一个无参数的构造函数,但是需要带参数的构造函数,那么只需声明这些构造函数 – 将不会为你生成默认的构造函数

认为应该涵盖所有的基础…

使其私密。

所以,

class SomeClass { private SomeClass() { } public SomeClass(int SomeParam) { } } 

你可以把它变成私人的:

 private MyClass() { } 

或者(如果你不知道的话),如果你只是用参数声明一个构造函数,编译器就不会添加默认的那个,例如

 private MyClass(string myParameter) { //Can't call new MyClass() anymore } 

有一件事要提别人没有。 默认的构造函数应该仍然可以设置默认的实现位,以避免重用。 这是不是一个问题,如果它是私人的,因为你仍然可以链接到一个私人的构造函数。 你只是让它不可用的外部来源。

 private MyClass() { } public MyClass(string something) : this() { } 

解决了这个问题。 但是,请注意,如果该类不是密封的,那么受保护实际上可能是一个首选实现。

除了其他的答案,你可以阅读以下的文字,更多信息单例模式,和一些例子。 单例模式依赖于构造函数是私有的。

http://www.yoda.arachsys.com/csharp/singleton.html