默认构造函数
在没有构造函数的情况下定义类型时:
public class Animal
{
}
然后编译器生成一个等效于以下内容的默认构造函数:
public class Animal
{
public Animal() {}
}
该类型的任何构造函数的定义将禁止默认构造函数生成。如果类型定义如下:
public class Animal
{
public Animal(string name) {}
}
然后只能通过调用声明的构造函数来创建 Animal
。
// This is valid
var myAnimal = new Animal("Fluffy");
// This fails to compile
var unnamedAnimal = new Animal();
对于第二个示例,编译器将显示错误消息:
‘Animal’不包含带 0 参数的构造函数
如果你希望类具有无参数构造函数和带参数的构造函数,则可以通过显式实现两个构造函数来实现。
public class Animal
{
public Animal() {} //Equivalent to a default constructor.
public Animal(string name) {}
}
如果类扩展另一个没有无参数构造函数的类,编译器将无法生成默认构造函数。例如,如果我们有一个类 Creature
:
public class Creature
{
public Creature(Genus genus) {}
}
然后定义为 class Animal : Creature {}
的 Animal
将无法编译。