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.
C# feature specifications