預設建構函式

在沒有建構函式的情況下定義型別時:

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 將無法編譯。