【发布时间】:2017-02-01 23:07:20
【问题描述】:
我认为在类 (C#) 中拥有默认构造函数不是强制性的。
那么,在这种情况下,我应该在类中有一个空的构造函数还是可以跳过它?
拥有一个空的默认构造函数是最佳实践吗?
Class test
{
public test()
{
}
......
}
或
Class test
{
......
}
【问题讨论】:
标签: c#
我认为在类 (C#) 中拥有默认构造函数不是强制性的。
那么,在这种情况下,我应该在类中有一个空的构造函数还是可以跳过它?
拥有一个空的默认构造函数是最佳实践吗?
Class test
{
public test()
{
}
......
}
或
Class test
{
......
}
【问题讨论】:
标签: c#
如果该类不会被第三方使用并且您不需要重载的构造函数,请不要编写空构造函数。
但是……
假设您已经发布了产品,而第三方使用了您的课程。几个月后,有一个新要求要求您添加一个带参数的构造函数。
现在,通过这样做,C# 编译器不再生成默认构造函数。如果不显式添加空构造函数,第三方代码会被破坏。
在我看来,您应该始终为第三方使用的公共类定义空的构造函数(一行)。
【讨论】:
KISS - 如果你的类不需要在默认构造函数中做任何事情 - 不要定义它。编译器会为你生成一个。
除非类是静态的,否则类 没有构造函数被赋予一个 C#的公共默认构造函数 编译器以启用类 实例化。
【讨论】:
There's nothing like default constructors。它是 C# 中的公共无参数构造函数。 C# 编译器将在编译时在类中查找构造函数,如果未定义构造函数,将添加一个公共无参数构造函数。因此,如果您的类对象不需要任何特殊的构造操作,则可以跳过定义构造函数。
其次,如果你定义了一个带参数的构造函数,那么编译器将不会添加一个公共的无参数构造函数,因为编译器会假设你的对象必须通过你定义的构造函数来构造。话虽如此,如果您至少有一个参数化构造函数,如果您需要使用无参数构造函数构造对象,则必须显式定义无参数构造函数。
您还可以拥有一个私有的无参数构造函数,这有助于创建单例类。
【讨论】:
如果您不需要无参数构造函数,请不要添加一个空主体。但是,如果有人想要序列化/反序列化您的类的对象,那么您将需要一个无参数构造函数。
如果你没有定义构造函数,那么编译器会自动为你生成一个默认的无参数构造函数,但是如果你自己定义了构造函数就不会。
顺便说一句,您可以通过定义一个空的私有构造函数来抑制 C# 编译器自动生成的默认构造函数。
【讨论】:
[JsonConstructor] 对其进行注释。
默认情况下,C# 将为您添加一个零参数构造函数。因此,如果您在那里没有什么特别的事情要做,就不要添加一个。
如果您有另一个带参数的构造函数并且希望保持无参数构造函数处于活动状态,则您必须自己添加任何空构造函数 - 即使没有代码。
另一种需要添加空的无参数构造函数的情况是,如果您想将其访问修饰符从公共更改为其他内容(私有、受保护或内部)
【讨论】:
C# 编译器会为您创建默认构造函数,因此您不应编写无参数的构造函数,主体为空。
【讨论】:
我将包含一个空的无参数构造函数的唯一情况是,如果我希望构造函数是私有的,或者如果我希望无参数构造函数调用另一个以 null 作为参数的重载。顺便说一句,在上面的示例中,您通过未指定 public 将 Test 的构造函数设为私有。
class Foo
{
public Foo()
: this(null)
{
}
public Foo(string bar)
{
if (bar != null)
{
Console.WriteLine(bar);
}
}
}
【讨论】:
不要写一个空的构造函数,它会默认创建
【讨论】: