In Schnittstellen deklarierte statische abstrakte Member
.NET 6 bietet eine Vorschau auf ein neues Feature, mit dem Schnittstellenmember des Typs static
als abstract
markiert werden können. Dieses Feature umfasst mehrere Änderungen an der ECMA 335-Spezifikation, um Metadatenmuster der Zwischensprache (Intermediate Language, IL) zu ermöglichen, die zuvor als ungültig angesehen wurden. Weitere Informationen finden Sie unter Dotnet-/Runtime-Problem 49558.
Altes Verhalten
Wenn eine statische Schnittstelle als abstract
markiert wurde:
- Erzeugte der C#-Compiler den Fehler CS0112.
- Generierten Tools und andere Compiler ungültige IL-Metadaten.
Neues Verhalten
Ab .NET 6 können statische Schnittstellen-Member als abstract
markiert werden und werden erfolgreich kompiliert. Darüber hinaus gelten die generierten IL-Metadatenmuster jetzt aufgrund von Änderungen in der ECMA 335-Spezifikation als legal.
Die Implementierung von static abstract
Schnittstellen-Membern erfolgt mit Typen, die die Schnittstelle implementieren.
Hinweis
Für .NET 6 müssen Sie die Vorschaufunktionen in Ihrem Projekt aktivieren, um ein Schnittstellen-Member als static abstract
zu markieren.
Da es sich um ein neues rechtliches IL-Muster handelt, könnten vorhandene Tools die zugeordneten Metadaten falsch verarbeiten und unerwartetes Verhalten haben. Es ist wahrscheinlich, dass das Tooling auf das neue Metadatenmuster stößt, da Schnittstellen mit static abstract
-Membern jetzt bei den primitiven Typen erscheinen, zum Beispiel System.Int32.
Eingeführt in Version
.NET 6
Typ des Breaking Changes
Diese Änderung kann sich auf die binäre Kompatibilität auswirken.
Grund für die Änderung
Diese Änderung wurde eingeführt, da es keine Möglichkeit gab, statische Member zu abstrahieren und generalisierten Code für die Typen zu schreiben, die diese statischen Member definieren. Dies war besonders problematisch bei Memberarten, die nur in statischer Form vorhanden sind, z. B. Operatoren.
Empfohlene Maßnahme
Aktualisieren Sie alle Tools, die .NET-Binärdateien oder C#-Quellcode verwenden, um das neue Konzept der static abstract
-Schnittstellenmember zu berücksichtigen, einschließlich derjenigen, die jetzt bei den primitiven .NET-Typen vorhanden sind.
Betroffene APIs
Nicht zutreffend