一位同事问我这个问题,我们应该在类中始终包含默认构造函数吗?如果是,为什么?如果没有,为什么不呢?
100
public class Foo {
Foo() { }
Foo(int x, int y) {
...
}
}
我也有兴趣从专家那里了解这方面的情况.
一位同事问我这个问题,我们应该在类中始终包含默认构造函数吗?如果是,为什么?如果没有,为什么不呢?
100
public class Foo {
Foo() { }
Foo(int x, int y) {
...
}
}
我也有兴趣从专家那里了解这方面的情况.
您必须记住,如果不提供重载构造函数,编译器将为您生成默认构造函数.也就是说,如果你有
public class Foo
{
}
编译器将生成以下内容:
public class Foo
{
public Foo() { }
}
但是,只要添加另一个构造函数
public class Foo
{
public Foo(int x, int y)
{
// ...
}
}
编译器将不再自动为您生成默认构造函数.如果该类已经在依赖默认构造函数Foo f = new Foo();
的其他代码中使用,那么该代码现在就会中断.
如果您不希望有人能够在不提供数据的情况下初始化该类,那么应该创建一个默认构造函数,该构造函数为private
,以明确说明您正在阻止在没有输入数据的情况下构造实例.
但是,有时需要提供默认构造函数(无论是公共的还是私有的).如前所述,某些类型的序列化需要默认构造函数.有时,一个类有多个参数化构造函数,但也需要"较低级别"的初始化,在这种情况下,可以使用一个私有的默认构造函数,该构造函数链接到参数化构造函数中.
public class Foo
{
private Foo()
{
// do some low level initialization here
}
public Foo(int x, int y)
: this()
{
// ...
}
public Foo(int x, int y, int z)
: this()
{
// ...
}
}