介面中宣告的靜態抽象成員
.NET 6 預覽了一項新功能,其中 static
介面成員可標示為 abstract
。 這項功能涉及 ECMA 335 規格的多項變更,可允許之前系統視為不合法的中繼語言 (IL) 中繼資料模式。 如需詳細資訊,請參閱 dotnet/runtime#49558。
舊的行為
靜態介面標示為 abstract
時:
- C# 編譯器會產生錯誤 CS0112。
- 工具和其他編譯器會產生不合法的 IL 中繼資料。
新的行為
從 .NET 6 開始,靜態介面成員可標示為 abstract
且可成功編譯。 此外,基於 ECMA 335 規格所做的變更,現在系統會將所產生的 IL 中繼資料模式視為合法。
static abstract
介面成員的實作流程,是由實作介面的型別所提供。
注意
針對 .NET 6,您必須在專案中啟用預覽功能,才能將介面成員標示為 static abstract
。
由於這是最近才合法化的 IL 模式,目前使用的工具很可能不正確地處理相關聯的中繼資料,並出現非預期行為。 使用的工具很可能遇到新的中繼資料模式,因為有 static abstract
成員的介面現在會顯示在 System.Int32 之類的基本類型上。
導入的版本
.NET 6
中斷性變更的類型
這項變更會影響二進位相容性。
變更原因
之所以推出這項變更,是因為之前無法使靜態成員抽象化,也無法撰寫適用於各種定義這些靜態成員型別的通用程式碼。 對於只以靜態形式存在的成員類型而言 (例如運算子),這個狀況尤其棘手。
建議的動作
更新所有使用 .NET 二進位檔或 C# 原始程式碼的工具,以便納入 static abstract
介面成員的新概念,包括現存於 .NET 基本類型上的工具。
受影響的 API
N/A
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應