訓練
模組
Get started with classes and objects in C# - Training
Learn how to create classes and instantiate objects that expose encapsulated field data by using class definitions, constructors, and the 'new' operator.
建構函式 是在建立 類別 或 結構 的實例時,執行時期所呼叫的方法。 類別或結構可以有多個採用不同自變數的建構函式。 建構函式可讓您確保類型實例在建立時有效。 如需詳細資訊和範例,請參閱使用建構函式 和
有數個動作是初始化新實例的一部分。 下列動作會依下列順序執行:
當使用 new
運算子建立實例時,會發生上述行動。 如果 struct
的新實例設為其 default
值,則所有實例字段都會設定為 0。 當建立陣列時,陣列的元素會設定為預設值0或 null
。
靜態建構函式(如果有的話)會在類別的任何實例開始進行實例建構之前執行。 靜態建構函式最多執行一次。
建構函式是與其類別名稱相同的函式。 其方法簽章可以包含選擇性 存取修飾詞、方法名稱和其參數清單;它不包含傳回類型。 下列範例顯示名為 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
類別,其建構函式有一個名為 的單一字串參數。 表達式主體定義會將自變數指派給 [locationName
] 字段。
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
如果類型需要參數來建立實例,您可以使用 主要建構函式 來指出需要一或多個參數來具現化類型,如下列範例所示:
public class LabelledContainer<T>(string label)
{
public string Label { get; } = label;
public required T Contents
{
get;
init;
}
}
上述範例顯示實例建構函式,其會初始化新的物件。 類別或結構也可以宣告靜態建構函式,以初始化型別的靜態成員。 靜態建構函式是無參數的。 如果您未提供靜態建構函式來初始化靜態欄位,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.
}
如需詳細資訊和範例,請參閱 靜態建構函式。
訓練
模組
Get started with classes and objects in C# - Training
Learn how to create classes and instantiate objects that expose encapsulated field data by using class definitions, constructors, and the 'new' operator.