建構函式 (C# 程式設計手冊)
每當建立類別或結構的執行個體時,會呼叫其建構函式。 類別或結構可有使用不同引數的多個建構函式。 建構函式能讓程式設計師可以設定預設值、限制具現化,以及撰寫彈性且容易閱讀的程式碼。 如需詳細資訊和範例,請參閱執行個體建構函式和使用建構函式。
有數個動作是初始化新執行個體的一部分。 這些動作會依下列順序進行:
- 執行個體欄位設定為 0。 通常由執行階段完成。
- 欄位初始設定式執行。 欄位初始設定式會在最衍生型別中執行。
- 基底類型欄位初始設定式會執行。 從直接基底開始,通過每個基底型別到 System.Object 的欄位初始設定式。
- 基底執行個體建構函式會執行。 任何執行個體建構函式從 Object.Object 開始,通過每個基底類別到直接基底類別。
- 執行個體建構函式會執行。 型別的執行個體建構函式會執行。
- 物件初始設定式會執行。 如果運算式包含任何物件初始設定式,這些初始設定式會在執行個體建構函式執行之後執行。 物件初始設定式會依照文字順序執行。
初始化新的執行個體時,就會發生上述動作。 如果將 struct
的新執行個體設定為其 default
值,則所有執行個體欄位均會設為 0。
如果靜態建構函式尚未執行,靜態建構函式會在執行任何執行個體建構函式動作之前執行。
建構函式語法
建構函式是名稱與其類型名稱相同的方法。 其方法簽章只包含選擇性的存取修飾詞、方法名稱及其參數清單;不包含傳回的類型。 下例示範名為 Person
的類別建構函式。
public class Person
{
private string last;
private string first;
public Person(string lastName, string firstName)
{
last = lastName;
first = firstName;
}
// Remaining implementation of Person class.
}
如果建構函式可以實作為單一陳述式,您就可以使用運算式主體定義。 下列範例定義 Location
類別,這個類別的建構函式包含名為 name 的單一字串參數。 運算式主體定義會將引數指派給 locationName
欄位。
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
靜態建構函式
前例都已顯示建立新物件的執行個體建構函式。 類別或結構也可以有靜態建構函式,用來初始化類型的靜態成員。 靜態建構函式無參數。 若您未提供靜態建構函式至初始化靜態欄位,C# 編譯器會將靜態欄位初始化為其預設值,如 C# 型別中的預設值一文中所列。
下列範例會使用靜態建構函式來初始化靜態欄位。
public class Adult : Person
{
private static int minimumAge;
public Adult(string lastName, string firstName) : base(lastName, firstName)
{ }
static Adult()
{
minimumAge = 18;
}
// Remaining implementation of Adult class.
}
您也可以使用運算式主體定義來定義靜態建構函式,如下例所示。
public class Child : Person
{
private static int maximumAge;
public Child(string lastName, string firstName) : base(lastName, firstName)
{ }
static Child() => maximumAge = 18;
// Remaining implementation of Child class.
}
如需詳細資訊及範例,請參閱靜態建構函式。