Freigeben über


Konstruktoren (C#-Programmierleitfaden)

Wenn eine Instanz einer Klasse oder einer Struktur erstellt wird, wird der Konstruktor aufgerufen. Eine Klasse oder Struktur verfügt möglicherweise über mehrere Konstruktoren, die andere Argumente verwenden. Mit Konstruktoren können Programmierer Standardwerte festlegen, Instanziierungen einschränken und Code schreiben, der flexibel und leicht zu lesen ist. Weitere Informationen und Beispiele finden Sie unter Instanzkonstruktoren und Verwenden von Konstruktoren.

Es gibt mehrere Aktionen, die Teil der Initialisierung einer neuen Instanz sind. Diese Aktionen werden in der folgenden Reihenfolge ausgeführt:

  1. Instanzfelder sind auf 0 (null) festgelegt. Dies erfolgt in der Regel durch die Runtime.
  2. Feldinitialisierer werden ausgeführt. Dies sind die Feldinitialisierer in der am häufigsten abgeleiteten Typausführung.
  3. Feldinitialisierer des Basistyps werden ausgeführt. Dies ist der Feldinitialisierer, beginnend mit der direkten Basis über jeden Basistyp bis System.Object.
  4. Basisinstanzkonstruktoren werden ausgeführt. Alle Instanzkonstruktoren, beginnend mit Object.Object über jede Basisklasse bis zur direkten Basisklasse
  5. Der Instanzkonstruktor wird ausgeführt. Der Instanzkonstruktor für den Typ wird ausgeführt.
  6. Objektinitialisierer werden ausgeführt. Wenn der Ausdruck Objektinitialisierer enthält, werden diese nach Ausführung des Instanzkonstruktors ausgeführt. Objektinitialisierer werden in der Textreihenfolge ausgeführt.

Die vorherigen Aktionen werden ausgeführt, wenn eine neue Instanz initialisiert wird. Wenn eine neue Instanz eines struct-Typs auf seinen default-Wert festgelegt ist, werden alle Instanzfelder auf 0 (null) festgelegt.

Wenn der statische Konstruktor nicht ausgeführt wird, wird er ausgeführt, bevor eine der Instanzkonstruktoraktionen ausgeführt wird.

Konstruktorsyntax

Ein Konstruktor ist eine Methode, dessen Name derselbe ist wie der seines Typs. Die Methodensignatur enthält nur einen optionalen Zugriffsmodifizierer, den Methodennamen und die Parameterliste; ein Rückgabetyp ist nicht enthalten. Im folgenden Beispiel wird der Konstruktor für eine Klasse mit dem Namen Person gezeigt.

public class Person
{
   private string last;
   private string first;

   public Person(string lastName, string firstName)
   {
      last = lastName;
      first = firstName;
   }

   // Remaining implementation of Person class.
}

Wenn ein Konstruktor als einzelne Anweisung implementiert werden kann, können Sie eine expression body definition (Ausdruckstextdefinition) verwenden. Im folgenden Beispiel wird eine Location-Klasse definiert, deren Klassenkonstruktor einen einzelnen Zeichenfolgenparameter namens name enthält. Die Ausdruckstextdefinition weist das Argument dem Feld locationName zu.

public class Location
{
   private string locationName;

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

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

Statische Konstruktoren

Die vorherigen Beispiele haben alle Instanzkonstruktoren gezeigt, die ein neues Objekt erstellen. Eine Klasse oder Struktur kann auch einen statischen Konstruktor haben, der statische Member dieses Typs initialisiert. Statische Konstruktoren sind parameterlos. Wenn Sie keinen statischen Konstruktor zum Initialisieren von statischen Feldern angeben, initialisiert der C#-Compiler statische Felder mit ihrem Standardwert, wie unter Standardwerte der C#-Typen aufgeführt.

Im folgenden Beispiel wird ein statischer Konstruktor verwendet, um ein statisches Feld zu initialisieren.

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.
}

Sie können einen statischen Konstruktor auch mit einer Ausdruckstextdefinition definieren, wie im folgenden Beispiel gezeigt.

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.
}

Weitere Informationen und Beispiele finden Sie unter Statische Konstruktoren.

In diesem Abschnitt

Weitere Informationen