Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A
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 egy , amely csak egy beállítóval rendelkezik. 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 kód egy init automatikusan implementált tulajdonság egyik tartozékát mutatja be:
class Person_InitExampleAutoProperty
{
public int YearOfBirth { get; init; }
}
Előfordulhat, hogy az egyik tartozékot implementálnia kell a paraméterérvényesítés biztosításához. Ezt a field C# 14-ben bevezetett kulcsszóval teheti meg. A field kulcsszó hozzáfér az adott tulajdonsághoz tartozó fordító szintetizált háttérmezőhöz. Az alábbi példa egy tulajdonságot mutat be, amelyben a init tartozék ellenőrzi a paraméter tartományát value ."
class Person_InitExampleFieldProperty
{
public int YearOfBirth
{
get;
init
{
field = (value <= DateTime.Now.Year)
? value
: throw new ArgumentOutOfRangeException(nameof(value), "Year of birth can't be in the future");
}
}
}
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;
}
}
Az alábbi példa egy nevű tulajdonsághoz gettartozó tartozékot init és YearOfBirth 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 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:
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;
}
}
Az alábbi példa egy , csak olvasási és private set tulajdonság közötti initkü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.