介面中宣告的靜態抽象成員

.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

另請參閱