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}")]a0> 取消 #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]
但是, [Obsolete] 报告并 [Deprecated] 报告警告和错误,而不是 [Experimental] 存在多个属性。