init (Referenční dokumentace jazyka C#)
Klíčové init
slovo definuje metodu přístupového objektu ve vlastnosti nebo indexeru. Init-only setter přiřadí hodnotu vlastnosti nebo indexer element pouze během vytváření objektu. Vynucuje init
neměnnost, takže po inicializaci objektu není možné ho změnit. Přístupový init
objekt umožňuje volání kódu použít inicializátor objektů k nastavení počáteční hodnoty. Naproti tomu automaticky implementovaná vlastnost pouze get
setter musí být inicializována voláním konstruktoru. Vlastnost s příslušenstvím private set
lze po konstrukci upravit, ale pouze ve třídě.
Následující příklad definuje jak a get
init
příslušenství pro vlastnost s názvem YearOfBirth
. Používá soukromé pole pojmenované _yearOfBirth
k vrácení hodnoty vlastnosti.
class Person_InitExample
{
private int _yearOfBirth;
public int YearOfBirth
{
get { return _yearOfBirth; }
init { _yearOfBirth = value; }
}
}
Přistupování init
se často skládá z jednoho příkazu, který přiřazuje hodnotu, jak tomu bylo v předchozím příkladu. Z důvodu init
, následující nefunguje :
var john = new Person_InitExample
{
YearOfBirth = 1984
};
john.YearOfBirth = 1926; //Not allowed, as its value can only be set once in the constructor
Přistupující init
objekt nevynucuje volajícím nastavit vlastnost. Místo toho umožňuje volajícím používat inicializátor objektů při zakázání pozdějších úprav. Modifikátor můžete přidat required
tak, aby volající nastavil vlastnost. Následující příklad ukazuje init
jedinou vlastnost s typem hodnoty nullable jako jeho backing pole. Pokud volající vlastnost neinicializuje YearOfBirth
, bude mít tato vlastnost výchozí null
hodnotu:
class Person_InitExampleNullability
{
private int? _yearOfBirth;
public int? YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
Chcete-li vynutit, aby volající nastavil počáteční nenulovou hodnotu, přidejte required
modifikátor, jak je znázorněno v následujícím příkladu:
class Person_InitExampleNonNull
{
private int _yearOfBirth;
public required int YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
Přístupové init
objekty lze použít jako člen s výrazem. Příklad:
class Person_InitExampleExpressionBodied
{
private int _yearOfBirth;
public int YearOfBirth
{
get => _yearOfBirth;
init => _yearOfBirth = value;
}
}
Přístupové init
objekty lze také použít v automaticky naváděných vlastnostech, jak ukazuje následující příklad kódu:
class Person_InitExampleAutoProperty
{
public int YearOfBirth { get; init; }
}
Následující příklad ukazuje rozdíl mezi private set
, jen pro čtení a init
vlastnost. Verze privátní sady i verze jen pro čtení vyžadují volající, aby použili přidaný konstruktor k nastavení vlastnosti name. Verze private set
umožňuje, aby osoba po vytvoření instance změnila své jméno. Verze init
nevyžaduje konstruktor. Volající mohou inicializovat vlastnosti pomocí inicializátoru objektů:
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" };
specifikace jazyka C#
Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro