防止使用默认构造函数

时间:2010-05-20 16:01:17

标签: c#

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

我能想到的只是抛出一个异常,但我想要一些导致编译时错误的东西。

5 个答案:

答案 0 :(得分:97)

  • 如果类中的所有内容都是静态的,请考虑将其设置为静态类。这样,你根本就不会得到构造函数。
  • 如果您想要一个无参数构造函数,但您不希望它是公共的,请明确声明并将其设为私有(或内部等)
  • 如果您不想要无参数构造函数但是想要带有参数的构造函数,那么只需声明那些 - 不会为您生成默认构造函数

认为应涵盖所有基础......

答案 1 :(得分:37)

将其设为私有。

所以,

class SomeClass
{
    private SomeClass()
    {
    }

    public SomeClass(int SomeParam)
    {
    }
}

答案 2 :(得分:9)

你可以把它变成私人的:

private MyClass()
{
}

或者(如果您还不知道)如果您只是声明一个带参数的构造函数,编译器不会添加默认值,例如

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

答案 3 :(得分:6)

有一点要提及其他人没有。默认构造函数仍应能够设置默认实现位,以避免重用。如果它是私有的,这不是问题,因为您仍然可以链接到私有构造函数。你只是让它对外部来源无法使用。

private MyClass()
{
}

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

解决了这个问题。但请注意,如果类没有密封,受保护实际上可能是首选实现。

答案 4 :(得分:1)

除了其他答案之外,您还可以阅读以下文字,了解有关Singleton模式的更多信息以及一些示例。单例模式依赖于构造函数是私有的。

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