次の方法で共有


ExperimentalAttribute

手記

この記事は機能仕様です。 仕様は、機能の設計ドキュメントとして機能します。 これには、提案された仕様の変更と、機能の設計と開発時に必要な情報が含まれます。 これらの記事は、提案された仕様の変更が最終決定され、現在の ECMA 仕様に組み込まれるまで公開されます。

機能の仕様と完成した実装の間には、いくつかの違いがある可能性があります。 これらの違いは、関連する 言語設計会議 (LDM) ノートでキャプチャされます。

機能仕様を C# 言語標準に導入するプロセスの詳細については、仕様に関する記事を参照してください。

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

報告された診断

診断は技術的には警告ですが、コンパイラが抑制できるように、レポートの目的でエラーとして扱われます。 これにより、診断が抑制されていない場合にビルドが失敗します。

次に当てはまる型またはメンバーへの参照について診断が報告されます。

  • 属性でマークされている。
  • 属性でマークされたアセンブリまたはモジュールで、

参照が [Experimental] メンバー内で発生する場合と自動的に抑制される場合はを除きます。

明示的なコンパイラ オプションや #pragmaなど、通常の方法で診断を抑制することもできます。
たとえば、API が [Experimental("DiagID")] または [Experimental("DiagID", UrlFormat = "https://example.org/{0}")]でマークされている場合、#pragma warning disable DiagIDで診断を抑制できます。

実験用属性に指定された診断 ID が有効な C# 識別子でない場合、エラーが生成されます。

Message プロパティの値が指定されていない場合、診断メッセージは特定のメッセージであり、'{0}' は完全修飾型またはメンバー名です。

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

Message プロパティの値が指定されている場合、診断メッセージは特定のメッセージです。ここで、'{0}' は完全修飾型またはメンバー名、'{1}'Messageです。

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

この属性は、基本型またはオーバーライドされたメンバーから継承されません。

ObsoleteAttribute(非推奨属性)と DeprecatedAttribute(廃止予定の属性)

[Experimental] の警告は、[Obsolete] または [Deprecated] メンバー内で報告されます。
[Obsolete] および [Deprecated] の警告とエラーは、[Experimental] メンバー内で報告されます。
ただし、複数の属性がある場合は、[Experimental] ではなく、[Obsolete][Deprecated] の警告とエラーが報告されます。