Freigeben über


ExperimentalAttribute

Anmerkung

Dieser Artikel ist eine Featurespezifikation. Die Spezifikation dient als Designdokument für das Feature. Es enthält vorgeschlagene Spezifikationsänderungen sowie Informationen, die während des Entwurfs und der Entwicklung des Features erforderlich sind. Diese Artikel werden veröffentlicht, bis die vorgeschlagenen Spezifikationsänderungen abgeschlossen und in die aktuelle ECMA-Spezifikation aufgenommen werden.

Es kann einige Abweichungen zwischen der Featurespezifikation und der abgeschlossenen Implementierung geben. Diese Unterschiede sind in den entsprechenden Hinweisen zum Language Design Meeting (LDM) festgehalten.

Sie erfahren mehr über den Prozess der Adaption von Funktionen in den C#-Sprachstandard in dem Artikel über die Spezifikationen.

Melden Sie Warnungen für Verweise auf Typen und Mitglieder, die mit System.Diagnostics.CodeAnalysis.ExperimentalAttributegekennzeichnet sind.

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; }
    }
}

Gemeldete Diagnose

Obwohl die Diagnose technisch eine Warnung ist, damit der Compiler sie unterdrücken kann, wird sie als Fehler zum Zwecke der Berichterstellung behandelt. Dies führt dazu, dass der Build fehlschlägt, wenn die Diagnose nicht unterdrückt wird.

Die Diagnose wird für jeden Hinweis auf einen Typ oder ein Member gemeldet, der/das entweder:

  • mit dem Attribut gekennzeichnet ist,
  • in einer Assembly oder einem Modul ist, die oder das mit dem Attribut gekennzeichnet ist,

außer wenn der Verweis innerhalb der [Experimental]-Members, wird er automatisch unterdrückt.

Es ist auch möglich, die Diagnose auf übliche Weise zu unterdrücken, zum Beispiel durch eine explizite Compileroption oder #pragma.
Wenn die API beispielsweise mit [Experimental("DiagID")] oder [Experimental("DiagID", UrlFormat = "https://example.org/{0}")]gekennzeichnet ist, kann die Diagnose mit #pragma warning disable DiagIDunterdrückt werden.

Es wird ein Fehler erzeugt, wenn die Diagnose-ID, die dem experimentellen Attribut zugewiesen wurde, kein gültiger C#-Bezeichner ist.

Wenn kein Wert für die Message-Eigenschaft angegeben wird, handelt es sich bei der Diagnosenachricht um eine bestimmte Nachricht, wobei '{0}' der vollqualifizierte Typ oder Membername ist.

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

Wenn kein Wert für die Message-Eigenschaft angegeben wird, handelt es sich bei der Diagnosenachricht um eine bestimmte Nachricht, wobei '{0}' der vollqualifizierte Typ oder Membername und '{1}' die Message ist.

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

Das Attribut wird nicht von Basistypen oder überschriebenen Membern geerbt.

ObsoleteAttribute und DeprecatedAttribute

Warnungen für [Experimental] werden innerhalb der [Obsolete] oder [Deprecated]-Member gemeldet.
Warnungen und Fehler für [Obsolete] und [Deprecated] werden innerhalb der [Experimental]-Member gemeldet.
Warnungen und Fehler für [Obsolete] und [Deprecated] werden jedoch anstelle von [Experimental] gemeldet, wenn mehrere Attribute vorhanden sind.