防止使用默认的构造函数
有没有办法阻止使用默认的构造函数?
所有我能想到的是抛出一个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() { }
解决了这个问题。 但是,请注意,如果该类不是密封的,那么受保护实际上可能是一个首选实现。
除了其他的答案,你可以阅读以下的文字,更多信息单例模式,和一些例子。 单例模式依赖于构造函数是私有的。