Megosztás a következőn keresztül:


Konstruktorok (C# programozási útmutató)

A konstruktor a futtatókörnyezet által meghívott metódus, amikor létrejön egy osztály egy példánya vagy egy strukturáló. Egy osztály vagy szerkezet több konstruktorsal is rendelkezhet, amelyek különböző argumentumokat használnak. A konstruktorok lehetővé teszik annak biztosítását, hogy a típuspéldányok érvényesek legyenek létrehozáskor. További információkért és példákért lásd: Példánykonstruktorok és Konstruktorok használata.

Több művelet is része egy új példány inicializálásának. A következő műveletek a következő sorrendben történnek:

  1. A példánymezők 0-ra vannak beállítva. Ezt az inicializálást általában a futtatókörnyezet végzi.
  2. Mező inicializálóifutnak. A mező inicializálói a legelterjedtebb típusban futnak.
  3. Alaptípusú mező inicializálóifutnak. Az inicializálók a mezők számára a közvetlen alaptípustól kezdve minden alaptípuson át egészen System.Object-ig haladnak.
  4. Alappéldány-konstruktorokfuttatnak. Minden példánykonstruktor, a Object.Object-val kezdve, az összes alaposztályon keresztül a közvetlen alaposztályig.
  5. A példánykonstruktor futtatása megtörténik. A típus példánykonstruktora fut.
  6. objektum-inicializálókfutnak. Ha a kifejezés tartalmaz objektum-inicializálókat, azok a példánykonstruktor futtatása után futnak. Az objektum inicializálói szöveges sorrendben futnak.

Az előző műveletek akkor történnek, ha egy példányt a new operátorhasználatával hoznak létre. Ha egy struct új példánya a default értékére van állítva, minden példánymező értéke 0. A tömb elemeinek alapértelmezett értéke 0 vagy null a tömb létrehozásakor.

A statikus konstruktor, ha vannak ilyenek, a példánykonstruktor-műveletek végrehajtása előtt fut a típus bármely példányán. A statikus konstruktor legfeljebb egyszer fut.

A C# 14-től kezdődően a példánykonstruktorokat részleges tagokként deklarálhatja. A részleges konstruktoroknak deklarálási és végrehajtási deklarációval is rendelkezniük kell.

Konstruktor szintaxisa

A konstruktorok olyan metódusok, amelyek neve megegyezik a típusával. A metódus aláírása tartalmazhat egy választható hozzáférés-módosítót, valamint a metódus nevét és paraméterlistáját, de nem tartalmaz visszatérési típust. Az alábbi példa egy Personnevű osztály konstruktorát mutatja be.

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

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

   // Remaining implementation of Person class.
}

Ha egy konstruktor egyetlen utasításként implementálható, használhat egy kifejezés törzstagját. Az alábbi példa egy olyan osztályt Location határoz meg, amelynek konstruktorának egyetlen sztringparamétere van. name A kifejezés törzsdefiníciója az argumentumot a locationName mezőhöz rendeli.

public class Location
{
   private string locationName;

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

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

Ha egy típushoz paraméterre van szükség egy példány létrehozásához, használhat egy elsődleges konstruktort, jelezheti, hogy a típus példányosításához legalább egy paraméter szükséges, ahogyan az alábbi példában látható:

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

Az partial típushoz elsődleges konstruktor deklarálható. Csak egy elsődleges konstruktor-deklaráció engedélyezett. Más szóval csak egy típus deklarációja partial tartalmazhatja az elsődleges konstruktor paramétereit.

Statikus konstruktorok

Az előző példák a példánykonstruktorokat mutatják be, amelyek inicializálnak egy új objektumot. Egy osztály vagy szerkezet statikus konstruktort is deklarálhat, amely inicializálja a típus statikus tagjait. A statikus konstruktorok paraméter nélküliek. Ha nem biztosít statikus konstruktort a statikus mezők inicializálásához, a C#-fordító inicializálja a statikus mezőket az alapértelmezett értékükre a C# típusú cikk Alapértelmezett értékei című cikkben felsoroltak szerint.

Az alábbi példa statikus konstruktor használatával inicializál egy statikus mezőt.

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

A statikus konstruktorokat kifejezéstörzsdefinícióval is definiálhatja, ahogy az az alábbi példában is látható.

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

További információ és példák: Statikus konstruktorok.

Részleges konstruktorok

A C# 14-től kezdődően részleges konstruktorokat deklarálhat részleges osztályban vagy szerkezetben. A részleges konstruktoroknak meghatározó deklarációval és végrehajtási deklarációval kell rendelkezniük. A részleges konstruktorok deklaráló és megvalósító aláírásainak meg kell egyeznie a részleges tagok szabályainak megfelelően. A részleges konstruktor definiáló deklarációja nem használhatja a : base(): this() konstruktor inicializálóját. Minden konstruktor inicializálót hozzá kell adni a implementálási deklarációhoz.

Lásd még: