Esdeveniment
Crea aplicacions intel·ligents
17 de març, 21 - 21 de març, 10
Uneix-te a la sèrie de trobades per crear solucions d'IA escalables basades en casos d'ús del món real amb altres desenvolupadors i experts.
Registreu-vos-hi araAquest navegador ja no s’admet.
Feu l’actualització al Microsoft Edge per aprofitar les característiques més recents, les actualitzacions de seguretat i l’assistència tècnica.
El modificador required
indica que el campo o la propiedad a la que se aplica debe inicializarse por un inicializador de objeto . Cualquier expresión que inicialice una nueva instancia del tipo debe inicializar todos los miembros necesarios . El modificador required
está disponible a partir de C# 11. El modificador required
permite a los desarrolladores crear tipos en los que las propiedades o campos deben inicializarse correctamente, pero todavía permiten la inicialización mediante inicializadores de objeto. Varias reglas garantizan este comportamiento:
required
se puede aplicar a los campos y propiedades , declarados en struct
, y en tipos class
, incluidos los tipos record
y record struct
. El modificador required
no se puede aplicar a los miembros de un interface
.required
. No se pueden establecer en inicializadores de objeto.null
. Si el tipo es un tipo de referencia que no acepta valores NULL, el compilador emite una advertencia si inicializa el miembro para null
. El compilador emite un error si el miembro no se inicializa en absoluto.public
no puede contener un campo required
que sea protected
. Además, las propiedades obligatorias deben tener establecedores (los descriptores de acceso set
o init
) que sean al menos tan visibles como sus tipos contenedores. Los miembros que no son accesibles no se pueden establecer mediante código que crea una instancia.required
declarado en la clase base. Ocultar un miembro obligatorio impide que los autores de la llamada usen inicializadores de objeto para él. Además, los tipos derivados que invalidan una propiedad necesaria deben incluir el modificador required
. El tipo derivado no puede quitar el estado required
. Los tipos derivados pueden agregar el modificador required
al invalidar una propiedad.required
no se use como argumento de tipo cuando el parámetro type incluya la restricción new()
. El compilador no puede exigir que todos los miembros necesarios se inicialicen en el código genérico.required
no se permite en la declaración de parámetros posicionales en un registro. Puede agregar una declaración explícita para una propiedad posicional que incluya el modificador required
.Algunos tipos, como registros posicionales, usan un constructor principal para inicializar propiedades posicionales. Si alguna de esas propiedades incluye el modificador required
, el constructor principal agrega el atributo SetsRequiredMembers
. Esto indica que el constructor principal inicializa todos los miembros necesarios. Puede escribir su propio constructor con el atributo System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute. Sin embargo, el compilador no comprueba que estos constructores inicialicen todos los miembros necesarios. Más bien, el atributo informa al compilador que el constructor inicializa todos los miembros necesarios. El atributo SetsRequiredMembers
agrega estas reglas a los constructores:
SetsRequiredMembers
, ya sea this()
, o base()
, también debe incluir el atributo SetsRequiredMembers
. Esto garantiza que los autores de llamadas puedan usar correctamente todos los constructores adecuados.record
tienen aplicado el atributo SetsRequiredMembers
si alguno de los miembros es required
.Advertiment
El SetsRequiredMembers
deshabilita las comprobaciones del compilador de que todos los miembros required
se inicializan cuando se crea un objeto. Úselo con precaución.
El código siguiente muestra una jerarquía de clases que usa el modificador required
para las propiedades FirstName
y 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; }
}
Para obtener más información sobre los miembros obligatorios, consulte la especificación de características de C#11 Miembros obligatorios.
Comentaris de .NET
.NET és un projecte de codi obert. Seleccioneu un enllaç per enviar comentaris:
Esdeveniment
Crea aplicacions intel·ligents
17 de març, 21 - 21 de març, 10
Uneix-te a la sèrie de trobades per crear solucions d'IA escalables basades en casos d'ús del món real amb altres desenvolupadors i experts.
Registreu-vos-hi ara