Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
required Modifikátor označuje, že pole nebo vlastnost, na které se vztahuje, 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.
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
Pomocí modifikátoru required můžou vývojáři vytvářet typy, ve kterých musí být vlastnosti nebo pole správně inicializovány, ale přesto umožňují inicializaci prostřednictvím inicializátorů objektů. Toto chování zajišťuje několik pravidel:
-
requiredPoužijte modifikátor u polí a vlastností deklarovaných vstructtypech aclasstypech, včetněrecordarecord structtypů. Modifikátor nelze použítrequiredu členů objektuinterface. - Explicitní implementace rozhraní nelze označit jako
required. Nemůžete je nastavit v inicializátorech objektů. - Musíte inicializovat požadované členy, ale můžete je inicializovat 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
publicnapříklad nemůže obsahovatrequiredpole, které jeprotected. Požadované vlastnosti navíc musí obsahovat settery (setneboinitpřístupové metody), které jsou alespoň tak viditelné jako jejich obsahující typy. Kód, který vytvoří instanci, nemůže nastavit členy, které nejsou přístupné. - Odvozené třídy nemohou skrýt člena
requireddeklarovaného v základní třídě. Skrytím požadovaného členu zabráníte volajícím použít inicializátory objektů. Kromě toho odvozené typy, které přepíší požadovanou vlastnost, musí obsahovat modifikátorrequired. Odvozený typ nemůže stavrequiredodebrat. Odvozené typy mohou při přepsání vlastnosti přidat modifikátorrequired. - Typ nelze použít s žádnými
requiredčleny 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. - Modifikátor v deklaraci nelze použít
requiredpro poziční parametry záznamu. Můžete přidat explicitní deklaraci pro poziční vlastnost, která zahrnuje modifikátorrequired.
Některé typy, jako 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í modifikátor required, primární konstruktor přidá atribut SetsRequiredMembers. Tento atribut označuje, ž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ý s jiným konstruktorem anotovaným atributem
SetsRequiredMembers, buďthis(), nebobase(), musí také obsahovat atributSetsRequiredMembers. Tím zajistíte, aby volající mohli správně používat všechny příslušné konstruktory. - Konstruktory kopírování generované pro typy
recordmají použitý atributSetsRequiredMembers, pokud je některý z členůrequired.
Varování
Atribut SetsRequiredMembers zakáže kontroly 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á modifikátor required pro vlastnosti FirstName a LastName:
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 povinných členech najdete v dokumentaci specifikace funkce C#11 – Požadované členy.