Udostępnij za pośrednictwem


AtrybutEksperymentalny

Notatka

Ten artykuł jest specyfikacją funkcji. Specyfikacja służy jako dokument projektowy dla funkcji. Zawiera proponowane zmiany specyfikacji wraz z informacjami wymaganymi podczas projektowania i opracowywania funkcji. Te artykuły są publikowane do momentu sfinalizowania proponowanych zmian specyfikacji i włączenia ich do obecnej specyfikacji ECMA.

Mogą wystąpić pewne rozbieżności między specyfikacją funkcji a ukończoną implementacją. Te różnice są przechwytywane w odpowiednich spotkania projektowego języka (LDM).

Więcej informacji na temat procesu wdrażania specyfikacji funkcji można znaleźć w standardzie języka C# w artykule dotyczącym specyfikacji .

Zgłaszaj ostrzeżenia dla odwołań do typów i członków oznaczonych 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; }
    }
}

Zgłoszona diagnostyka

Mimo że diagnostyka jest technicznie ostrzeżeniem, dzięki czemu kompilator zezwala na jego pomijanie, jest traktowany jako błąd w celu raportowania. Spowoduje to niepowodzenie kompilacji, jeśli diagnostyka nie zostanie wyciszona.

Diagnoza jest zgłaszana dla dowolnego odwołania do typu lub członka, który może być:

  • oznakowane atrybutem
  • w zestawie lub module oznaczonym atrybutem,

z wyjątkiem sytuacji, kiedy odwołanie występuje w członkach [Experimental], jest ono wtedy automatycznie pomijane.

Możliwe jest również wyłączenie diagnostyki w zwykły sposób, na przykład poprzez jawną opcję kompilatora lub #pragma.
Jeśli na przykład interfejs API jest oznaczony [Experimental("DiagID")] lub [Experimental("DiagID", UrlFormat = "https://example.org/{0}")], diagnostyka może zostać pominięta przy użyciu #pragma warning disable DiagID.

Błąd jest generowany, jeśli identyfikator diagnostyczny podany dla atrybutu eksperymentalnego nie jest prawidłowym identyfikatorem języka C#.

Jeśli nie podano wartości właściwości Message, komunikat diagnostyczny jest określonym komunikatem, w którym '{0}' jest w pełni kwalifikowanym typem lub nazwą elementu członkowskiego.

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

Jeśli zostanie podana wartość właściwości Message, komunikat diagnostyczny jest określonym komunikatem, w którym '{0}' jest w pełni kwalifikowanym typem lub nazwą elementu członkowskiego, a '{1}' jest Message.

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

Atrybut nie jest dziedziczony z typów podstawowych ani nadpisanych członków.

Przestarzałe atrybuty i przestarzałeAttribute

Ostrzeżenia dotyczące [Experimental] są zgłaszane wśród członków [Obsolete] lub [Deprecated].
Ostrzeżenia i błędy dotyczące [Obsolete] i [Deprecated] są zgłaszane wewnątrz [Experimental] członków.
Jednak ostrzeżenia i błędy dotyczące [Obsolete] i [Deprecated] są zgłaszane zamiast [Experimental], jeśli istnieje wiele atrybutów.