次の方法で共有


コンストラクター (C# プログラミング ガイド)

コンストラクター は、クラスのインスタンスまたは 構造体 が作成されたときにランタイムによって呼び出されるメソッドです。 クラスまたは構造体は、異なる引数を受け取る複数のコンストラクターを持つことができます。 コンストラクターを使用すると、型のインスタンスが作成時に有効であることを確認できます。 詳細と例については、「インスタンス コンストラクターのコンストラクターの使用」を参照してください。

新しいインスタンスの初期化の一部であるアクションがいくつかあります。 次のアクションは、次の順序で実行されます。

  1. インスタンス フィールドは 0に設定されます。 通常、この初期化はランタイムによって行われます。
  2. フィールド初期化子が実行されます。 最多派生型のフィールド初期化子が実行されます。
  3. 基本型フィールド初期化子は、実行されます。 フィールド初期化子は、直接の基底クラスから始まり、各基底クラスを通って System.Objectまで続きます。
  4. 基本インスタンス コンストラクターが実行されます。 各基底クラスから直接基底クラスへの Object.Object から始まる任意のインスタンス コンストラクター。
  5. インスタンス コンストラクターが実行されます。 型のインスタンス コンストラクターが実行されます。
  6. オブジェクト初期化子が実行されます。 式にオブジェクト初期化子が含まれている場合は、インスタンス コンストラクターの実行後に実行されます。 オブジェクト初期化子は、テキスト順に実行されます。

上記のアクションは、new 演算子を使用してインスタンスが作成されるときに実行されます。 struct の新しいインスタンスがその default 値に設定されている場合、すべてのインスタンス フィールドは 0 に設定されます。 配列の要素は、配列の作成時に既定値の 0 または null に設定されます。

静的コンストラクター(存在する場合) は、型の任意のインスタンスに対してインスタンス コンストラクターアクションが実行される前に実行されます。 静的コンストラクターは、最大で 1 回実行されます。

C# 14 以降では、インスタンス コンストラクターを 部分メンバーとして宣言できます。 部分コンストラクターには、 宣言宣言と実装宣言の両方が必要です。

コンストラクターの構文

コンストラクターは、型と同じ名前のメソッドです。 そのメソッド シグネチャには、オプションの アクセス修飾子、メソッド名、およびパラメーター リストを含めることができます。戻り値の型は含まれません。 次の例は、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.
}

コンストラクターを 1 つのステートメントとして実装できる場合は、式本体メンバー使用できます。 次の例では、コンストラクターに 1 つの文字列パラメーターLocationを持つname クラスを定義します。 式本体の定義は、引数を locationName フィールドに割り当てます。

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

型でインスタンスを作成するためにパラメーターが必要な場合は、次の例に示すように、プライマリ コンストラクター を使用して、型のインスタンス化に 1 つ以上のパラメーターが必要であることを示すことができます。

public class LabelledContainer<T>(string label)
{
   public string Label { get; } = label;
   public required T Contents 
   { 
      get;
      init;
   }
}

partial型でプライマリ コンストラクターを宣言できます。 1 つのプライマリ コンストラクター宣言のみが許可されます。 つまり、プライマリ コンストラクターのパラメーターを含めることができるのは、 partial 型の宣言が 1 つだけです。

静的コンストラクター

前の例では、新しいオブジェクトを初期化するインスタンス コンストラクターを示します。 クラスまたは構造体は、型の静的メンバーを初期化する静的コンストラクターを宣言することもできます。 静的コンストラクターはパラメーターなしです。 静的コンストラクターを指定して静的フィールドを初期化しない場合、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.
}

詳細と例については、「静的コンストラクターの」を参照してください。

部分コンストラクター

C# 14 以降では、部分クラスまたは構造体で 部分コンストラクター を宣言できます。 部分コンストラクターには、 定義宣言実装宣言が必要です。 部分コンストラクターの宣言と実装のシグネチャは、部分 メンバーの規則に従って一致する必要があります。 部分コンストラクターの定義宣言では、 : base() またはコンストラクター初期化子 : this() 使用できません。 コンストラクター初期化子は、実装宣言に追加する必要があります。

関連項目