Dela via


Konstruktorer (C#-programmeringsguide)

När en instans av en klass eller en struct skapas anropas konstruktorn. En klass eller struct kan ha flera konstruktorer som använder olika argument. Konstruktorer gör det möjligt för programmeraren att ange standardvärden, begränsa instansiering och skriva kod som är flexibel och lätt att läsa. Mer information och exempel finns i Instanskonstruktorer och Använda konstruktorer.

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

  1. Instansfält är inställda på 0. Detta görs vanligtvis av körningen.
  2. Fältinitierare körs. Fältinitierarna i den mest härledda typen körs.
  3. Fältinitierare för bastyp körs. Fältinitierare som börjar med direktbasen genom varje bastyp till System.Object.
  4. Basinstanskonstruktorer körs. Alla instanskonstruktorer, som börjar med Object.Object genom varje basklass till den direkta basklassen.
  5. Instanskonstruktorn körs. Instanskonstruktorn för typen körs.
  6. Objektinitierare körs. Om uttrycket innehåller några objektinitierare körs de efter att instanskonstruktorn har körts. Objektinitierare körs i textordning.

Föregående åtgärder utförs när en ny instans initieras. Om en ny instans av en struct är inställd på dess default värde anges alla instansfält till 0.

Om den statiska konstruktorn inte har körts körs den statiska konstruktorn innan någon av instanskonstruktorns åtgärder utförs.

Konstruktorsyntax

En konstruktor är en metod vars namn är samma som namnet på dess typ. Dess metodsignatur innehåller endast 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 uttryckstextdefinition. I följande exempel definieras en Location klass vars konstruktor har en enda strängparameter med namnet name. Uttryckets brödtextdefinition 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;
   }
}

Statiska konstruktorer

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

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.

I det här avsnittet

Se även