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.

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

Siehe auch