Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
El required modificador indica que un inicializador de objeto debe inicializar el campo o la propiedad a la que se aplica. Cualquier expresión que inicialice una nueva instancia del tipo debe inicializar todos los miembros necesarios . El required modificador está disponible a partir de C# 11.
La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.
La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.
Sugerencia
Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.
Mediante el required modificador , los desarrolladores pueden crear tipos en los que las propiedades o los campos deben inicializarse correctamente, pero aún permiten la inicialización a través de inicializadores de objetos. Varias reglas garantizan este comportamiento:
- Aplique el
requiredmodificador a campos y propiedades declarados enstructyclasstipos, incluidosrecordlos tipos yrecord struct. No se puede aplicar elrequiredmodificador a los miembros de .interface - No se pueden marcar implementaciones de interfaz explícitas como
required. No se pueden establecer en inicializadores de objeto. - Debe inicializar los miembros necesarios, pero puede inicializarlos en
null. Si el tipo es un tipo de referencia que no acepta valores NULL, el compilador emite una advertencia si inicializa el miembro paranull. El compilador emite un error si el miembro no se inicializa en absoluto. - Los miembros obligatorios deben ser al menos tan visibles como su tipo contenedor. Por ejemplo, una clase
publicno puede contener un camporequiredque seaprotected. Además, las propiedades obligatorias deben tener establecedores (los descriptores de accesosetoinit) que sean al menos tan visibles como sus tipos contenedores. El código que crea una instancia no puede establecer miembros a los que no se puede acceder. - Las clases derivadas no pueden ocultar un miembro
requireddeclarado 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 modificadorrequired. El tipo derivado no puede quitar el estadorequired. Los tipos derivados pueden agregar el modificadorrequiredal invalidar una propiedad. - No se puede usar un tipo con ningún
requiredmiembro como argumento de tipo cuando el parámetro type incluye lanew()restricción . El compilador no puede exigir que todos los miembros necesarios se inicialicen en el código genérico. - No se puede usar el
requiredmodificador en la declaración para los parámetros posicionales de un registro. Puede agregar una declaración explícita para una propiedad posicional que incluya el modificadorrequired.
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. Este atributo 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:
- Un constructor que se encadena a otro constructor anotado con el atributo
SetsRequiredMembers, ya seathis(), obase(), también debe incluir el atributoSetsRequiredMembers. Esto garantiza que los autores de llamadas puedan usar correctamente todos los constructores adecuados. - Los constructores de copia generados para los tipos
recordtienen aplicado el atributoSetsRequiredMemberssi alguno de los miembros esrequired.
Advertencia
El SetsRequiredMembers atributo deshabilita las comprobaciones del compilador de que todos los required miembros 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.