required modifier (Referenční dokumentace jazyka C#)
required
Modifikátor označuje, že pole nebo vlastnost, na které se použije, musí být inicializována inicializátorem objektu. Libovolný výraz, který inicializuje novou instanci typu, musí inicializovat všechny požadované členy. Modifikátor required
je k dispozici od jazyka C# 11. required
Modifikátor umožňuje vývojářům vytvářet typy, ve kterých musí být správně inicializovány vlastnosti nebo pole, ale přesto umožňuje inicializaci pomocí inicializátorů objektů. Toto chování zajišťuje několik pravidel:
required
Modifikátor lze použít pro pole a vlastnosti deklarované vstruct
, aclass
typy, včetněrecord
arecord struct
typy.required
Modifikátor nelze použít u členů objektuinterface
.- Explicitní implementace rozhraní nelze označit jako
required
. Nelze je nastavit v inicializátorech objektů. - Požadované členy musí být inicializovány, ale mohou být inicializovány na
null
. Pokud je typ odkazem bez hodnoty null, kompilátor vydá upozornění, pokud inicializujete člena nanull
. Kompilátor vydá chybu, pokud člen vůbec není inicializován. - Požadované členy musí být alespoň tak viditelné jako jejich typ. Třída například
public
nemůže obsahovatrequired
pole, které jeprotected
. Požadované vlastnosti navíc musí obsahovatttery (set
neboinit
přístupové objekty), které jsou alespoň tak viditelné jako jejich typy. Členy, které nejsou přístupné, není možné nastavit pomocí kódu, který vytvoří instanci. - Odvozené třídy nemohou skrýt
required
člen deklarovaný v základní třídě. Skrytím požadovaného členu zabráníte volajícím v použití inicializátorů objektů. Kromě toho odvozené typy, které přepisovat požadovanou vlastnost musí obsahovatrequired
modifikátor. Odvozený typ nemůže odebratrequired
stav. Odvozené typy mohou přidatrequired
modifikátor při přepsání vlastnosti. - Typ s libovolnými
required
členy nelze použít jako argument typu, pokud parametr typu obsahujenew()
omezení. Kompilátor nemůže vynutit inicializaci všech požadovaných členů v obecném kódu. required
Modifikátor není u deklarace pro poziční parametry záznamu povolen. Můžete přidat explicitní deklaraci pro poziční vlastnost, která zahrnujerequired
modifikátor.
Některé typy, například poziční záznamy, používají primární konstruktor k inicializaci pozičních vlastností. Pokud některé z těchto vlastností zahrnují required
modifikátor, primární konstruktor přidá SetsRequiredMembers
atribut. To znamená, že primární konstruktor inicializuje všechny požadované členy. Můžete napsat vlastní konstruktor s atributem System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute . Kompilátor ale neověřuje, že tyto konstruktory inicializují všechny požadované členy. Místo toho atribut tvrdí kompilátoru, že konstruktor inicializuje všechny požadované členy. Atribut SetsRequiredMembers
přidá tato pravidla do konstruktorů:
- Konstruktor, který je zřetězený k jinému konstruktoru anotovanému atributu
SetsRequiredMembers
, musíthis()
base()
obsahovatSetsRequiredMembers
také atribut. Tím zajistíte, aby volající mohli správně používat všechny příslušné konstruktory. - Konstruktory kopírování generované pro
record
typy majíSetsRequiredMembers
atribut použitý, pokud některý z členů jsourequired
.
Upozorňující
Zakáže SetsRequiredMembers
kontrolu kompilátoru, že se při vytvoření objektu inicializují všechny required
členy. Používejte ho s opatrností.
Následující kód ukazuje hierarchii tříd, která používá required
modifikátor pro vlastnosti FirstName
a LastName
vlastnosti:
public class Person
{
public Person() { }
[SetsRequiredMembers]
public Person(string firstName, string lastName) =>
(FirstName, LastName) = (firstName, lastName);
public required string FirstName { get; init; }
public required string LastName { get; init; }
public int? Age { get; set; }
}
public class Student : Person
{
public Student() : base()
{
}
[SetsRequiredMembers]
public Student(string firstName, string lastName) :
base(firstName, lastName)
{
}
public double GPA { get; set; }
}
Další informace o požadovaných členech najdete ve specifikaci funkce C#11 – Požadované členy .