Share via


Constructors (C#-programmeerhandleiding)

Wanneer een exemplaar van een klasse of struct wordt gemaakt, wordt de constructor aangeroepen. Een klasse of struct kan meerdere constructors hebben die verschillende argumenten hebben. Constructors stellen de programmeur in staat standaardwaarden in te stellen, instantiëring te beperken en code te schrijven die flexibel en gemakkelijk te lezen is. Zie Exemplaarconstructors en Constructors gebruiken voor meer informatie en voorbeelden.

Er zijn verschillende acties die deel uitmaken van het initialiseren van een nieuw exemplaar. Deze acties vinden plaats in de volgende volgorde:

  1. Exemplaarvelden zijn ingesteld op 0. Dit wordt doorgaans gedaan door de runtime.
  2. Uitvoering van veld-initializers. De veld initialisaties in de meest afgeleide typeuitvoering.
  3. Initialisatie van basistypevelden worden uitgevoerd. Veld initialisaties die beginnen met de directe basis door elk basistype naar System.Object.
  4. Basisexemplaren worden uitgevoerd. Alle exemplaarconstructors, te beginnen met Object.Object elke basisklasse naar de directe basisklasse.
  5. De exemplaarconstructor wordt uitgevoerd. De instantieconstructor voor het type wordt uitgevoerd.
  6. Object initializers worden uitgevoerd. Als de expressie object-initializers bevat, worden deze uitgevoerd nadat de exemplaarconstructor is uitgevoerd. Object initializers worden uitgevoerd in de tekstvolgorde.

De voorgaande acties worden uitgevoerd wanneer een nieuw exemplaar wordt geïnitialiseerd. Als een nieuw exemplaar van een struct is ingesteld op default de waarde, worden alle exemplaarvelden ingesteld op 0.

Als de statische constructor niet is uitgevoerd, wordt de statische constructor uitgevoerd voordat een van de constructoracties van het exemplaar wordt uitgevoerd.

Constructorsyntaxis

Een constructor is een methode waarvan de naam hetzelfde is als de naam van het type. De handtekening van de methode bevat alleen een optionele toegangsaanpassing, de naam van de methode en de bijbehorende parameterlijst. Het bevat geen retourtype. In het volgende voorbeeld ziet u de constructor voor een klasse met de naam 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.
}

Als een constructor kan worden geïmplementeerd als één instructie, kunt u een definitie van de expressietekst gebruiken. In het volgende voorbeeld wordt een Location klasse gedefinieerd waarvan de constructor één tekenreeksparameter heeft met de naam. De definitie van de expressietekst wijst het argument toe aan het locationName veld.

public class Location
{
   private string locationName;

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

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

Statische constructors

De vorige voorbeelden bevatten alle weergegeven exemplaarconstructors, waarmee een nieuw object wordt gemaakt. Een klasse of struct kan ook een statische constructor hebben, waarmee statische leden van het type worden geïnitialiseerd. Statische constructors zijn parameterloos. Als u geen statische constructor opgeeft voor het initialiseren van statische velden, initialiseert de C#-compiler statische velden naar de standaardwaarde zoals vermeld in het artikel Standaardwaarden van C#-typen .

In het volgende voorbeeld wordt een statische constructor gebruikt om een statisch veld te initialiseren.

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

U kunt ook een statische constructor definiëren met een definitie van de hoofdtekst van de expressie, zoals in het volgende voorbeeld wordt weergegeven.

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

Zie Statische constructors voor meer informatie en voorbeelden.

In dit gedeelte

Zie ook