空的构造函数或没有构造函数

我认为在类(C#)中使用默认构造函数并不是强制性的。

那么,在这种情况下,我可以在课堂上有一个空的构造函数,还是可以跳过?

有一个空的默认构造函数是一个最佳做法?

Class test { public test() { } ...... } 

要么

 Class test { ...... } 

如果该类不会被第三方使用,并且不需要重载的构造函数,则不要写空的构造函数。

但…

想象一下,你已经发货了,第三方使用你的class级。 几个月后,有一个新的要求,让你添加一个构造函数的参数。

现在,通过这样做,C#编译器不再生成默认构造函数。 如果你不明确地添加一个空的构造函数,那么第三方代码将被中断。

在我看来,你应该总是为第三方使用的公共类定义空的构造函数(一行)。

KISS – 如果你的类不需要在默认构造函数中做任何事情 – 不要定义它。 编译器会为你生成一个。

从马的口中 :

除非类是静态的,否则没有构造函数的类将被C#编译器赋予一个公共的默认构造函数,以启用类实例化。

There's nothing like default constructors 。 它是C#中的公共无参数构造函数。 C#编译器将在编译时查找类中的构造函数,如果没有定义构造函数,将会添加一个不带公共参数的构造函数。 所以如果你的类对象不需要任何特殊的构造操作,就可以跳过定义一个构造函数。

其次,如果你定义了一个带参数的构造函数,那么编译器将不会添加一个无公共参数的构造函数,因为编译器会假设你的对象必须通过你定义的构造函数来构造。 话虽如此,如果您有至less一个参数化构造函数,如果您需要使用参数构造函数构造对象,则必须显式定义无参数构造函数。

你也可以有一个私人的无参数构造函数,也有助于单身人士的课堂。

如果你不需要无参数的构造函数,不要添加一个空体。 但是, 如果有人想序列化/反序列化你的类的对象,那么你将需要一个无参数的构造函数。

如果你没有定义构造函数,那么编译器会为你自动生成一个默认的无参数构造函数,但是如果你自己定义一个构造函数,它将不会自动产生。

顺便提一句,通过定义一个空的私有构造函数,可以禁止C#编译器自动生成的默认构造函数。

C#编译器将为您创build默认的构造函数,所以您不应该使用空的主体来编写无参数的构造函数。

默认情况下,C#会为您添加一个零参数构造函数。 所以如果你在那里没有什么特别的东西,就不要加一个。

如果你有另外一个带参数的构造函数,并且想保持无参构造函数的存在,你将不得不自己添加任何空的构造函数 – 即使没有代码。

另一种你想要添加一个空的无参数构造函数的场景是,如果你想把它的访问修饰符从public改为别的(private,protected或internal)

唯一的时候,我会包括一个空的无参数构造函数是如果我想构造函数是私人的,或者如果我想无参数构造函数调用另一个重载与null作为参数。 顺便说一句,在你上面的例子中,你已经通过不指定public来使Test的构造函数是私有的。

 class Foo { public Foo() : this(null) { } public Foo(string bar) { if (bar != null) { Console.WriteLine(bar); } } } 

不要写一个默认会创build的空构造函数