ExperimentalAttribute
Nota
Este artículo es una especificación de características. La especificación actúa como documento de diseño de la característica. Incluye cambios de especificación propuestos, junto con la información necesaria durante el diseño y el desarrollo de la característica. Estos artículos se publican hasta que se finalizan los cambios de especificación propuestos e se incorporan en la especificación ECMA actual.
Puede haber algunas discrepancias entre la especificación de características y la implementación completada. Esas diferencias se recogen en las notas de la reunión de diseño de lenguaje (LDM) correspondientes.
Puede obtener más información sobre el proceso de adopción de especificaciones de características en el estándar del lenguaje C# en el artículo sobre las especificaciones de .
Notificar advertencias para referencias a tipos y miembros marcados con System.Diagnostics.CodeAnalysis.ExperimentalAttribute
.
namespace System.Diagnostics.CodeAnalysis
{
[AttributeUsage(AttributeTargets.Assembly |
AttributeTargets.Module |
AttributeTargets.Class |
AttributeTargets.Struct |
AttributeTargets.Enum |
AttributeTargets.Constructor |
AttributeTargets.Method |
AttributeTargets.Property |
AttributeTargets.Field |
AttributeTargets.Event |
AttributeTargets.Interface |
AttributeTargets.Delegate, Inherited = false)]
public sealed class ExperimentalAttribute : Attribute
{
public ExperimentalAttribute(string diagnosticId)
{
DiagnosticId = diagnosticId;
}
public string DiagnosticId { get; }
public string? UrlFormat { get; set; }
public string? Message { get; set; }
}
}
Diagnóstico notificado
Aunque el diagnóstico es técnicamente una advertencia, por lo que el compilador permite suprimirlo, se trata como un error para la creación de informes. Esto hace que se produzca un error en la compilación si no se suprime el diagnóstico.
El diagnóstico se notifica para cualquier referencia a un tipo o miembro que sea:
- marcados con el atributo,
- en un ensamblado o módulo marcado con el atributo ,
excepto cuando la referencia ocurre dentro de los miembros de [Experimental]
, momento en el que se suprime automáticamente.
También es posible suprimir el diagnóstico por medios habituales, como una opción de compilador explícita o #pragma
.
Por ejemplo, si la API está marcada con [Experimental("DiagID")]
o [Experimental("DiagID", UrlFormat = "https://example.org/{0}")]
, el diagnóstico se puede suprimir con #pragma warning disable DiagID
.
Se produce un error si el identificador de diagnóstico proporcionado al atributo experimental no es un identificador de C# válido .
Si no se proporciona un valor para la propiedad Message
, el mensaje de diagnóstico será específico, donde '{0}'
es el nombre de tipo completamente calificado o el nombre del miembro.
'{0}' is for evaluation purposes only and is subject to change or removal in future updates.
Si se proporciona un valor para la propiedad Message
, el mensaje de diagnóstico será específico, donde '{0}'
es el nombre completo del tipo o miembro y '{1}'
es el Message
.
'{0}' is for evaluation purposes only and is subject to change or removal in future updates: '{1}'.
El atributo no se hereda de los tipos base ni de los miembros invalidados.
ObsoleteAttribute y DeprecatedAttribute
Las advertencias de [Experimental]
se notifican en miembros [Obsolete]
o [Deprecated]
.
Las advertencias y los errores de [Obsolete]
y [Deprecated]
se notifican dentro de los miembros [Experimental]
.
Pero se notifican advertencias y errores para [Obsolete]
y [Deprecated]
en lugar de [Experimental]
si hay varios atributos.
C# feature specifications