預設建構函式
在沒有建構函式的情況下定義型別時:
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
將無法編譯。