默认构造函数

在没有构造函数的情况下定义类型时:

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 将无法编译。