Dela via


Konstruktorer (C#-programmeringsguide)

En konstruktor är en metod som anropas av körtiden när en instans av en -klass eller en -struktur skapas. En klass eller struct kan ha flera konstruktorer som använder olika argument. Med konstruktorer kan du se till att instanser av typen är giltiga när de skapas. För mer information och exempel, se Instanskonstruktorer och Att använda konstruktorer.

Det finns flera åtgärder som ingår i initieringen av en ny instans. Följande åtgärder utförs i följande ordning:

  1. Instansfält är inställda på 0. Den här initialiseringen görs vanligtvis av körtiden.
  2. Fältinitierare kör. Fältinitierarna i den mest härledda typen körs.
  3. Fältinitierare av bastyp kör. Fältinitierare som börjar med den direkta basen genom varje bastyp till System.Object.
  4. Base-instanskonstruktorer kör. Alla instanskonstruktorer, från och med Object.Object, via varje basklass till den direkta basklassen.
  5. Instanskonstruktorn exekverar. Instanskonstruktorn för typen körs.
  6. Object-initierare kör. Om uttrycket innehåller några objektinitierare körs de när instanskonstruktorn har körts. Objektinitierare körs i textordning.

Föregående åtgärder utförs när en instans skapas med operatorn new. Om en ny instans av en struct är satt till sitt default-värde sätts alla instansfält till 0. Element i en matris är inställda på standardvärdet 0 eller null när en matris skapas.

Den statiska konstruktorn , om en sådan finns, körs innan några av instanskonstruktörens åtgärder utförs för någon instans av typen. Den statiska konstruktorn körs högst en gång.

Konstruktorsyntax

En konstruktor är en metod med samma namn som dess typ. Dess metodsignatur kan innehålla en valfri åtkomstmodifierare, metodnamnet och dess parameterlista. den innehåller inte någon returtyp. I följande exempel visas konstruktorn för en klass med namnet 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.
}

Om en konstruktor kan implementeras som en enda instruktion kan du använda en uttryckstextmedlem. I följande exempel definieras en Location-klass vars konstruktor har en enda strängparameter med namnet namn. Uttryckstextdefinitionen tilldelar argumentet till fältet locationName.

public class Location
{
   private string locationName;

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

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

Om en typ kräver en parameter för att skapa en instans kan du använda en primär konstruktor för att ange att en eller flera parametrar krävs för att instansiera typen, som du ser i följande exempel:

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

Statiska konstruktorer

I föregående exempel visas instanskonstruktorer som initierar ett nytt objekt. En klass eller struct kan också deklarera en statisk konstruktor som initierar statiska medlemmar av typen. Statiska konstruktorer är parameterlösa. Om du inte anger en statisk konstruktor för att initiera statiska fält initierar C#-kompilatorn statiska fält till standardvärdet enligt Standardvärden för C#-typer artikel.

I följande exempel används en statisk konstruktor för att initiera ett statiskt fält.

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

Du kan också definiera en statisk konstruktor med en uttryckstextdefinition, vilket visas i följande exempel.

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

Mer information och exempel finns i statiska konstruktorer.

Se även