init (C# referencia)
A init
kulcsszó egy tulajdonságban vagy indexelőben definiál egy kiegészítő metódust. Egy init-only setter csak az objektumépítés során rendel hozzá értéket a tulajdonsághoz vagy az indexelőelemhez. A rendszer init
kényszeríti a nem módosíthatóságot, így az objektum inicializálása után nem módosítható. A init
kiegészítő lehetővé teszi, hogy a kód meghívása objektum inicializáló használatával állítsa be a kezdeti értéket. Ezzel szemben konstruktor meghívásával inicializálni kell az get
automatikusan implementált, csak beállítóval rendelkező tulajdonságot. A tartozékokkal private set
rendelkező tulajdonság az építés után módosítható, de csak az osztályban.
Az alábbi példa egy nevű tulajdonsághoz YearOfBirth
tartozó tartozékot get
és init
tartozékot is definiál. A tulajdonság értékének visszaadásához egy elnevezett _yearOfBirth
magánmezőt használ.
class Person_InitExample
{
private int _yearOfBirth;
public int YearOfBirth
{
get { return _yearOfBirth; }
init { _yearOfBirth = value; }
}
}
A kiegészítő gyakran egyetlen utasításból áll, init
amely egy értéket rendel hozzá, ahogyan az előző példában is tette. Emiatt init
a következők nem működnek:
var john = new Person_InitExample
{
YearOfBirth = 1984
};
john.YearOfBirth = 1926; //Not allowed, as its value can only be set once in the constructor
A init
tartozék nem kényszeríti a hívókat a tulajdonság beállítására. Ehelyett lehetővé teszi a hívók számára, hogy objektum inicializálót használjanak, miközben tiltják a későbbi módosításokat. Hozzáadhatja a required
módosítót, hogy kényszerítse a hívókat egy tulajdonság beállítására. Az alábbi példa egy init
csak null értékű tulajdonságot mutat be háttérmezőként. Ha egy hívó nem inicializálja a YearOfBirth
tulajdonságot, akkor a tulajdonság alapértelmezett null
értéke a következő lesz:
class Person_InitExampleNullability
{
private int? _yearOfBirth;
public int? YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
Ha a hívókat a kezdeti nem null érték beállítására szeretné kényszeríteni, adja hozzá a required
módosító értéket az alábbi példában látható módon:
class Person_InitExampleNonNull
{
private int _yearOfBirth;
public required int YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
A init
tartozék kifejezési testű tagként is használható. Példa:
class Person_InitExampleExpressionBodied
{
private int _yearOfBirth;
public int YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
A init
kiegészítő automatikus tulajdonságokban is használható, ahogy az alábbi példakód is mutatja:
class Person_InitExampleAutoProperty
{
public int YearOfBirth { get; init; }
}
Az alábbi példa egy , csak olvasási és init
tulajdonság közötti private set
különbséget mutatja be. A privát és az írásvédett verzió egyaránt megköveteli, hogy a hívók a hozzáadott konstruktort használják a névtulajdonság beállításához. A private set
verzió lehetővé teszi, hogy egy személy módosítsa a nevét a példány létrehozása után. A init
verzióhoz nincs szükség konstruktorra. A hívók egy objektum inicializálóval inicializálhatják a tulajdonságokat:
class PersonPrivateSet
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public PersonPrivateSet(string first, string last) => (FirstName, LastName) = (first, last);
public void ChangeName(string first, string last) => (FirstName, LastName) = (first, last);
}
class PersonReadOnly
{
public string FirstName { get; }
public string LastName { get; }
public PersonReadOnly(string first, string last) => (FirstName, LastName) = (first, last);
}
class PersonInit
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
PersonPrivateSet personPrivateSet = new("Bill", "Gates");
PersonReadOnly personReadOnly = new("Bill", "Gates");
PersonInit personInit = new() { FirstName = "Bill", LastName = "Gates" };
C# nyelvspecifikáció
További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: