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

Ram*_*Ram 64 c#

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

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

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

Class test
{
   public test()
   {

   }
        ......
}
Run Code Online (Sandbox Code Playgroud)

要么

Class test
{
        ......
}
Run Code Online (Sandbox Code Playgroud)

Soe*_*Moe 71

如果第三方不会使用该类,并且您不需要重载的构造函数,请不要编写空构造函数.

但...

想象一下,您已经发运了产品,第三方使用了您的课程.几个月后,有一个新的要求,使您添加带有参数的构造函数.

现在,通过这样做,C#编译器不再生成默认构造函数.如果您没有显式添加空构造函数,则第三方代码将中断.

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

  • 如果您打算以这种方式打破第三方客户,您可能会争辩说您自己的单元测试会失败. (8认同)
  • 在另外一个话题,如果你想用你的.NET类的COM程序,一个公共的无参数的构造将被要求 - 如梭萌解释同样的原因,我会明确地把它的类. (4认同)

Igo*_*aka 35

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

马的嘴里:

除非该类是静态的,否则C#编译器会为没有构造函数的类提供公共默认构造函数,以便启用类实例化.

  • 澄清一下:如果你的类*至少有一个具有一个或多个参数的构造函数,那么C#编译器将*不*为你创建一个默认构造函数.在这种情况下,你*可能*想要显式创建一个默认构造函数,即使它没有做任何事情(即它是空的).(有关更多信息,请参阅已接受的答案及其他人 (4认同)

thi*_*eek 9

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

其次,如果您使用参数定义一个构造函数,则编译器将不会添加公共无参数构造函数,因为编译器将假定您的对象必须通过您定义的构造函数构造.话虽如此,如果您需要使用参数化构造函数构造对象,则必须显式定义无参数构造函数(如果您至少有一个参数化构造函数).

您还可以使用私有无参数构造函数,这有助于制作单例类.


Ste*_*art 5

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

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

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