我认为在类(C#)中使用默认构造函数并不是强制性的。
那么,在那种情况下,我应该在课堂上有一个空构造函数,还是可以跳过它?
拥有一个空的默认构造函数是最佳做法吗?
Class test
{
public test()
{
}
......
}
或
Class test
{
......
}
答案 0 :(得分:66)
如果第三方不使用该类,并且您不需要重载构造函数,请不要编写空构造函数。
但是...
想象一下,您已经发运了产品,第三方使用了您的课程。几个月之后,有一个新的要求会让你添加一个带参数的构造函数。
现在,通过这样做,C#编译器不再生成默认构造函数。如果您没有显式添加空构造函数,则第三方代码将中断。
在我看来,你应该总是为第三方使用的公共类定义空构造函数(一个班轮)。
答案 1 :(得分:34)
KISS - 如果你的类不需要在默认构造函数中做任何事情 - 不要定义它。编译器将为您生成一个。
除非类是静态的,否则是类 没有构造函数给出了 C#的公共默认构造函数 编译器以启用类 实例
答案 2 :(得分:8)
There's nothing like default constructors
。它是C#中的公共参数构造函数。 C#编译器在编译时会在类中查找构造函数,如果没有定义构造函数,则会添加一个无公共参数的构造函数。因此,如果类对象不需要任何特殊的构造操作,则可以跳过定义构造函数。
其次,如果您使用参数定义一个构造函数,则编译器将不会添加公共无参数构造函数,因为编译器将假定您的对象必须通过您定义的构造函数构造。话虽如此,如果您需要使用参数化构造函数构造对象,则必须显式定义无参数构造函数。
你也可以拥有一个私有的无参数构造函数,它有助于制作单例类。
答案 3 :(得分:4)
如果您不需要无参数构造函数,请不要添加一个空体。但是,如果有人想序列化/反序列化您的类的对象,那么您将需要一个无参数构造函数。
如果您没有定义构造函数,那么编译器将自动为您生成一个默认的无参数构造函数,但如果您自己定义构造函数则不会。
顺便说一句,您可以通过定义一个空的私有构造函数来抑制C#编译器自动生成的默认构造函数。
答案 4 :(得分:3)
默认情况下,C#将为您添加零参数构造函数。所以如果你没有特别的东西,不要加一个。
你必须自己添加任何空构造函数 - 即使没有代码 - 如果你有另一个带参数的构造函数,并且想要让无参数构造函数保持活动状态。
另一种情况是,如果要将其访问修饰符从公共更改为其他(私有,受保护或内部),则需要添加空的无参数构造函数
答案 5 :(得分:2)
C#编译器将为您创建默认构造函数,因此您不应该使用空体来编写无参数构造函数。
答案 6 :(得分:2)
我只包括一个空的无参数构造函数是因为我希望构造函数是私有的,或者我是否希望无参数构造函数以null作为参数调用另一个重载。顺便说一下,在上面的例子中,你通过不指定public来使Test的构造函数变为私有。
class Foo
{
public Foo()
: this(null)
{
}
public Foo(string bar)
{
if (bar != null)
{
Console.WriteLine(bar);
}
}
}
答案 7 :(得分:0)
不要写一个空构造函数,默认情况下会创建它