備註
本文是功能規格。 規格可作為功能的設計檔。 其中包含建議的規格變更,以及功能設計和開發期間所需的資訊。 這些文章會發佈,直到提議的規格變更完成並併併入目前的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隱藏診斷。
如果提供給實驗屬性的診斷標識碼不是 有效的 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] 。