ExperimentalAttribute
Observação
Este artigo é uma especificação de recurso. A especificação serve como o documento de design para o recurso. Ele inclui mudanças de especificação propostas, juntamente com as informações necessárias durante o design e desenvolvimento do recurso. Estes artigos são publicados até que as alterações de especificações propostas sejam finalizadas e incorporadas na especificação ECMA atual.
Pode haver algumas discrepâncias entre a especificação do recurso e a implementação concluída. Essas diferenças são capturadas nas notas pertinentes da Language Design Meeting (LDM).
Você pode saber mais sobre o processo de adoção de especificações de recursos no padrão de linguagem C# no artigo sobre as especificações .
Relatório de avisos para referências a tipos e membros marcados com 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
Embora o diagnóstico seja tecnicamente um aviso, de modo que o compilador permite suprimi-lo, ele é tratado como um erro para fins de relatório. Isso faz com que a compilação falhe se o diagnóstico não for suprimido.
O diagnóstico é relatado para qualquer referência a um tipo ou membro que seja:
- marcado com o atributo
- em um conjunto ou módulo marcado com o atributo,
exceto quando a referência ocorre nos membros de [Experimental]
, quando é suprimida automaticamente.
Também é possível suprimir o diagnóstico por meios usuais, como uma opção explícita do compilador ou #pragma
.
Por exemplo, se a API estiver marcada com [Experimental("DiagID")]
ou [Experimental("DiagID", UrlFormat = "https://example.org/{0}")]
, o diagnóstico poderá ser suprimido com #pragma warning disable DiagID
.
Um erro será produzido se a ID de diagnóstico dada ao atributo experimental não for um identificador C# válido.
Se um valor para a propriedade Message
não for fornecido, a mensagem de diagnóstico é uma mensagem específica, onde '{0}'
é o tipo completo ou o nome do membro.
'{0}' is for evaluation purposes only and is subject to change or removal in future updates.
Se um valor para Message
propriedade for fornecido, a mensagem de diagnóstico será uma mensagem específica, onde '{0}'
é o tipo totalmente qualificado ou nome de membro e '{1}'
é o Message
.
'{0}' is for evaluation purposes only and is subject to change or removal in future updates: '{1}'.
O atributo não é herdado de tipos base ou membros substituídos.
ObsoleteAttribute e DeprecatedAttribute
Avisos para [Experimental]
são reportados dentro de membros [Obsolete]
ou [Deprecated]
.
Avisos e erros para [Obsolete]
e [Deprecated]
são relatados dentro dos membros de [Experimental]
.
Mas avisos e erros para [Obsolete]
e [Deprecated]
são relatados em vez de [Experimental]
se houver vários atributos.
C# feature specifications