Partilhar via


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.