建構函式 (C# 程式設計手冊)

每當建立類別結構的執行個體時,會呼叫其建構函式。 類別或結構可有使用不同引數的多個建構函式。 建構函式能讓程式設計師可以設定預設值、限制具現化,以及撰寫彈性且容易閱讀的程式碼。 如需詳細資訊和範例,請參閱執行個體建構函式使用建構函式

有數個動作是初始化新執行個體的一部分。 這些動作會依下列順序進行:

  1. 執行個體欄位設定為 0。 通常由執行階段完成。
  2. 欄位初始設定式執行。 欄位初始設定式會在最衍生型別中執行。
  3. 基底類型欄位初始設定式會執行。 從直接基底開始,通過每個基底型別到 System.Object 的欄位初始設定式。
  4. 基底執行個體建構函式會執行。 任何執行個體建構函式從 Object.Object 開始,通過每個基底類別到直接基底類別。
  5. 執行個體建構函式會執行。 型別的執行個體建構函式會執行。
  6. 物件初始設定式會執行。 如果運算式包含任何物件初始設定式,這些初始設定式會在執行個體建構函式執行之後執行。 物件初始設定式會依照文字順序執行。

初始化新的執行個體時,就會發生上述動作。 如果將 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.
}

如需詳細資訊及範例,請參閱靜態建構函式

本節內容

另請參閱