注释
本文是功能规格说明。 此规范是功能的设计文档。 它包括建议的规范变更,以及功能设计和开发过程中所需的信息。 这些文章将持续发布,直至建议的规范变更最终确定并纳入当前的 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")]
,或者,可以使用 #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]
存在多个属性。