Condividi tramite


ExperimentalAttribute

Nota

Questo articolo è una specifica delle funzionalità. La specifica funge da documento di progettazione per la funzionalità. Include le modifiche specifiche proposte, insieme alle informazioni necessarie durante la progettazione e lo sviluppo della funzionalità. Questi articoli vengono pubblicati fino a quando le modifiche specifiche proposte non vengono completate e incorporate nella specifica ECMA corrente.

Potrebbero verificarsi alcune discrepanze tra la specifica di funzionalità e l'implementazione completata. Tali differenze vengono acquisite nelle note language design meeting (LDM) pertinenti.

Puoi saperne di più sul processo di adozione degli speclet delle funzionalità nello standard del linguaggio C# nell'articolo sulle specifiche di .

Segnalare avvisi per i riferimenti a tipi e membri contrassegnati 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; }
    }
}

Diagnostica segnalata

Anche se la diagnostica è tecnicamente un avviso, in modo che il compilatore consenta di sopprimerlo, viene considerato come un errore ai fini della segnalazione. In questo modo la compilazione non riesce se la diagnostica non viene soppressa.

Il messaggio diagnostico viene segnalato per qualsiasi riferimento a un tipo o a un membro che sia:

  • contrassegnato con l'attributo
  • in un assembly o un modulo contrassegnato con l'attributo ,

Eccetto quando il riferimento si verifica all'interno dei membri [Experimental]. In questo caso, viene soppresso automaticamente.

È anche possibile sopprimere la diagnostica con i mezzi usuali, come un'opzione esplicita del compilatore o #pragma.
Ad esempio, se l'API è contrassegnata con [Experimental("DiagID")] o [Experimental("DiagID", UrlFormat = "https://example.org/{0}")], la diagnostica può essere eliminata con #pragma warning disable DiagID.

Viene generato un errore se l'ID di diagnostica assegnato all'attributo sperimentale non è un identificatore C# valido .

Se non viene specificato un valore per la proprietà Message, il messaggio di diagnostica diventa specifico, in cui '{0}' è il nome completo del tipo o del membro.

'{0}' is for evaluation purposes only and is subject to change or removal in future updates.

Se viene fornito un valore per la proprietà Message, il messaggio di diagnostica è un messaggio specifico, dove '{0}' è il nome completamente qualificato del tipo o del membro e '{1}' è il Message.

'{0}' is for evaluation purposes only and is subject to change or removal in future updates: '{1}'.

L'attributo non viene ereditato dai tipi di base o dai membri sovrascritti.

ObsoleteAttribute e DeprecatedAttribute

Gli avvisi per [Experimental] vengono segnalati all'interno dei membri [Obsolete] o [Deprecated].
Gli avvisi e gli errori per [Obsolete] e [Deprecated] vengono segnalati nei membri di [Experimental].
Tuttavia, gli avvisi e gli errori per [Obsolete] e [Deprecated] vengono segnalati anziché [Experimental] se sono presenti più attributi.