Start Debugging
2023-10-29 Aktualisiert 2023-11-01 csharpdotnetdotnet-8 Edit on GitHub

C# Wie Sie Features als experimentell kennzeichnen

Ab C# 12 lassen sich Typen, Methoden, Properties oder Assemblies mit dem neuen ExperimentalAttribute als experimentell markieren. Erfahren Sie, wie Sie es mit diagnosticId, pragma-Tags und UrlFormat einsetzen.

Ab C# 12 wird ein neues ExperimentalAttribute eingeführt, mit dem Sie Typen, Methoden, Properties oder Assemblies als experimentelle Funktionen kennzeichnen können. Bei der Verwendung wird eine Compiler-Warnung ausgelöst, die sich über ein #pragma-Tag deaktivieren lässt.

Das Experimental-Attribut erfordert einen diagnosticId-Parameter im Konstruktor. Diese Diagnose-ID wird Teil der Compiler-Fehlermeldung, die bei jeder Verwendung des experimentellen Features erzeugt wird. Hinweis: Sie können dieselbe diagnostic-id auf Wunsch in mehreren Attributen verwenden.

Wichtig: Verwenden Sie in Ihrer diagnosticId keine Bindestriche (-) oder andere Sonderzeichen, da diese die #pragma-Syntax brechen und Nutzer daran hindern können, die Warnung zu deaktivieren. Beispielsweise lässt sich mit BAR-001 als Diagnose-ID die Warnung nicht unterdrücken und löst zusätzlich eine Compiler-Warnung im pragma-Tag aus.

CS1696 Single-line comment or end-of-line expected.

Sie können im Attribut auch ein UrlFormat angeben, um Entwickler zur Dokumentation des experimentellen Features zu führen. Möglich ist entweder eine absolute URL wie https://acme.com/warnings/BAR001 oder eine generische String-Format-URL (https://acme.com/warnings/{0}), bei der das Framework den Rest übernimmt.

Sehen wir uns ein paar Beispiele an.

Eine Methode als experimentell kennzeichnen

using System.Diagnostics.CodeAnalysis;

[Experimental("BAR001")]
void Foo() { }

Sie versehen die Methode einfach mit dem Experimental-Attribut und geben eine diagnosticId mit. Beim Aufruf von Foo() wird die folgende Compiler-Warnung erzeugt:

BAR001 ‘Foo()’ is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.

Sie können diese Warnung mit pragma-Tags umgehen:

#pragma warning disable BAR001
Foo();
#pragma warning restore BAR001

Wie oben erwähnt, lässt sich über die UrlFormat-Eigenschaft des Attributs ein Link zur Dokumentation angeben. Das ist vollkommen optional.

[Experimental("BAR001", UrlFormat = "https://acme.com/warnings/{0}")]
void Foo() { }

Damit gelangen Sie beim Klick auf die Fehlercodes in Visual Studio direkt zur angegebenen Dokumentationsseite. Zusätzlich wird die URL auch in die Diagnose-Fehlermeldung eingefügt:

BAR001 ‘Foo()’ is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. (https://acme.com/warnings/BAR001)

Weitere Einsatzorte

Das Attribut lässt sich an nahezu jeder denkbaren Stelle verwenden: an Assemblies, Modulen, Klassen, Structs, Enums, Properties, Feldern, Events und vielem mehr. Eine vollständige Liste der erlaubten Anwendungsorte zeigt die Definition selbst:

[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 { ... }

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Zurück