Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Errores y advertencias asociados a tipos
- CS8343:
ref structsNo pueden implementar interfaces - CS8344: La instrucción
foreachno puede funcionar en enumeradores de métodos asincrónicos o iteradores porque el tipo es una instancia deref structo un parámetro de tipo que permiteref struct. - CS8345: el campo o la propiedad implementada automáticamente no pueden ser de tipo a menos que sea un miembro de instancia de un
ref struct. - CS9048: El modificador
scopedsolo se puede usar para referencias y valoresref struct. - CS9050: Un campo
refno puede hacer referencia aref struct. - CS9059: Un campo ref solo se puede declarar en una estructura ref.
- CS9241: Ya se ha especificado "struct ref".
- CS9242: La cláusula de restricción "allows" debe ser la última restricción especificada.
- CS9243: No se pueden permitir estructuras ref para un parámetro de tipo conocido de otras restricciones como una clase.
- CS9244: Es posible que el tipo no sea una instancia de
ref structo un parámetro de tipo que permita structs ref para usarlo como parámetro en el tipo o método genéricos. - CS9245: El tipo no puede implementar el miembro de interfaz para el tipo
ref struct. - CS9246: No se puede acceder a un miembro de interfaz de instancia no virtual en un parámetro de tipo que permita la estructura ref.
- CS9247: La instrucción foreach no puede funcionar en enumeradores de tipo porque es un parámetro de tipo que permite la estructura ref y no se conoce en tiempo de compilación para implementar
IDisposable. - CS9267: Es posible que el tipo de elemento de un iterador no sea una estructura ref o un parámetro de tipo que permita structs ref.
Infracciones de seguridad de ref
- CS8345: el campo o la propiedad implementada automáticamente no pueden ser de tipo a menos que sea un miembro de instancia de un
ref struct. - CS9048: El modificador
scopedsolo se puede usar para referencias y valoresref struct. - CS9050: Un campo
refno puede hacer referencia aref struct. - CS9059: Un campo
refsolo se puede declarar en una instancia deref struct..
Un tipo ref struct puede incluir campos ref. Los campos ref no se permiten en otros tipos. El compilador aplica restricciones en las declaraciones y el uso de los tipos ref struct para aplicar reglas de seguridad de ref en instancias de cualquier tipo ref struct:
- Solo
ref structlos tipos pueden contener propiedades implementadasrefautomáticamente. - Solo los tipo
ref structo las variablesrefpueden tener el modificadorscoped. - U campo
refsolo se puede declarar en un tiporef struct. - Un campo
refno puede hacer referencia a un tiporef struct/
La infracción de cualquiera de estas reglas produce uno de los errores indicados. Si pretende usar esa característica de lenguaje, convierta el tipo en una instancia de ref struct. De lo contrario, quite la construcción no permitida.
Implementaciones de interfaz de estructura ref
- CS8343:
ref structsNo pueden implementar interfaces - CS8344: La instrucción
foreachno puede funcionar en enumeradores de métodos asincrónicos o iteradores porque el tipo es una instancia deref structo un parámetro de tipo que permiteref struct. - CS9241: Ya se ha especificado "struct ref".
- CS9242: La cláusula de restricción "allows" debe ser la última restricción especificada.
- CS9243: No se pueden permitir estructuras ref para un parámetro de tipo conocido de otras restricciones como una clase.
- CS9244: Es posible que el tipo no sea una instancia de
ref structo un parámetro de tipo que permita structs ref para usarlo como parámetro en el tipo o método genéricos. - CS9245: El tipo no puede implementar el miembro de interfaz para el tipo
ref struct. - CS9246: No se puede acceder a un miembro de interfaz de instancia no virtual en un parámetro de tipo que permita la estructura ref.
- CS9247: La instrucción foreach no puede funcionar en enumeradores de tipo porque es un parámetro de tipo que permite la estructura ref y no se conoce en tiempo de compilación para implementar
IDisposable. - CS9267: Es posible que el tipo de elemento de un iterador no sea una estructura ref o un parámetro de tipo que permita structs ref.
Antes de C# 13, los tipos ref struct no pueden implementar interfaces; el compilador genera CS8343. A partir de C# 13, los tipos ref struct pueden implementar interfaces, en función de las reglas siguientes:
- Un
ref structno se puede convertir en una instancia de una interfaz que implementa. Esta restricción incluye la conversión implícita cuando se usa un tiporef structcomo argumento cuando el parámetro es un tipo de interfaz. La conversión da como resultado una conversión boxing, que infringe la seguridad ref. - Un
ref structque implementa una interfaz debe implementar todos los miembros de la interfaz.ref structdebe implementar miembros en los que la interfaz incluya una implementación predeterminada.
A partir de C# 13, se puede usarref struct como argumento de tipo para un parámetro de tipo genérico, si y solo si el parámetro de tipo genérico tiene la antirestricción allows ref struct. Al usar la antirestricción allows ref struct, debe seguir estas reglas:
- Se usa
ref structcomo argumento de tipo, el parámetro de tipo debe tener la antirestricciónallows ref struct. La antirestricciónallows ref structdebe ser la última en la cláusulawherepara ese parámetro - Los usos de instancias del parámetro de tipo deben obedecer las reglas de seguridad de ref.
- Un
ref structargumento de tipo o que puede ser unref structtipo no se puede usar como tipo de elemento para un método de iterador.