Constructors (C#-programmeerhandleiding)
Een constructor is een methode die door de runtime wordt aangeroepen wanneer een exemplaar van een klasse of een struct- wordt gemaakt. Een klasse of struct kan meerdere constructors hebben die verschillende argumenten aannemen. Met constructors kunt u ervoor zorgen dat exemplaren van het type geldig zijn wanneer ze worden gemaakt. Voor meer informatie en voorbeelden, zie Instantieconstructors en Het gebruik van constructors.
Er zijn verschillende acties die deel uitmaken van het initialiseren van een nieuw exemplaar. De volgende acties worden uitgevoerd in de volgende volgorde:
- instantievelden zijn ingesteld op 0. Deze initialisatie wordt doorgaans uitgevoerd door de runtime.
- Veldinitialisators wordenuitgevoerd. De veldinitialiseringen in het meest afgeleide type worden uitgevoerd.
- Initializers van het basistype wordenuitgevoerd. Veldinitialisatoren die beginnen bij de directe basis en doorgaan door elk basistype tot System.Object.
- base-exemplaarconstructors wordenuitgevoerd. Alle instantieconstructeurs, beginnend met Object.Object, en vervolgens via elke basisklasse naar de directe basisklasse.
- De instantieconstructor wordtuitgevoerd. De instantieconstructor voor het type wordt uitgevoerd.
- Object initializers wordenuitgevoerd. Als de expressie object-initialisaties bevat, worden deze uitgevoerd nadat de instantieconstructor is uitgevoerd. Object initializers worden uitgevoerd in de tekstuele volgorde.
De voorgaande acties worden uitgevoerd wanneer een exemplaar wordt gemaakt met behulp van de new
-operator. Als een nieuw exemplaar van een struct
is ingesteld op de default
waarde, worden alle exemplaarvelden ingesteld op 0. Elementen van een matrix worden ingesteld op de standaardwaarde 0 of null
wanneer een matrix wordt gemaakt.
De statische constructor, indien aanwezig, wordt uitgevoerd voordat de instantieconstructoracties plaatsvinden voor enig exemplaar van het type. De statische constructor wordt maximaal één keer uitgevoerd.
Constructorsyntaxis
Een constructor is een methode met dezelfde naam als het type. De handtekening van de methode kan een optionele toegangsaanpassing, de naam van de methode en de bijbehorende parameterlijst bevatten; 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 expressielidgebruiken. In het volgende voorbeeld wordt een Location
-klasse gedefinieerd waarvan de constructor één tekenreeksparameter heeft met de naam naam. De definitie van de expressietekst wijst het argument toe aan het veld locationName
.
public class Location
{
private string locationName;
public Location(string name) => Name = name;
public string Name
{
get => locationName;
set => locationName = value;
}
}
Als voor een type een parameter is vereist om een exemplaar te maken, kunt u een primaire constructor gebruiken om aan te geven dat een of meer parameters vereist zijn om het type te instantiëren, zoals wordt weergegeven in het volgende voorbeeld:
public class LabelledContainer<T>(string label)
{
public string Label { get; } = label;
public required T Contents
{
get;
init;
}
}
Statische constructors
In de vorige voorbeelden ziet u exemplaarconstructors, waarmee een nieuw object wordt geïnitialiseerd. Een klasse of struct kan ook een statische constructor declareren, 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 de Standaardwaarden van C#-typen artikel.
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 constructorsvoor meer informatie en voorbeelden.