Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- A példánymezők 0-ra vannak beállítva. Ezt az inicializálást általában a futtatókörnyezet végzi.
- Mező inicializálóifutnak. A mező inicializálói a legelterjedtebb típusban futnak.
- 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.
- Alappéldány-konstruktorokfuttatnak. Minden példánykonstruktor, a Object.Object-val kezdve, az összes alaposztályon keresztül a közvetlen alaposztályig.
- A példánykonstruktor futtatása megtörténik. A típus példánykonstruktora fut.
- 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 Person
nevű 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
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.