Sdílet prostřednictvím


Statické abstraktní členy deklarované v rozhraních

.NET 6 ve verzi Preview novou funkci, ve které static lze členy rozhraní označit jako abstract. Tato funkce zahrnuje několik změn specifikace ECMA 335, které umožňují vzory metadat zprostředkujícího jazyka (IL), které byly dříve považovány za nezákonné. Další informace najdete v tématu dotnet/runtime#49558.

Staré chování

Pokud bylo statické rozhraní označeno jako abstract:

  • Kompilátor C# vygeneroval chybu CS0112.
  • Nástroje a další kompilátory generovaly neplatná metadata IL.

Nové chování

Počínaje rozhraním .NET 6 je možné členy statického rozhraní označit jako abstract a úspěšně se zkompiluje. Vzory metadat IL, které se generují, se navíc považují za právní kvůli změnám ve specifikaci ECMA 335.

Implementace static abstract členů rozhraní je poskytována typy, které implementují rozhraní.

Poznámka:

Pro .NET 6 je nutné povolit funkce ve verzi Preview v projektu, aby bylo možné označit člena rozhraní jako static abstract.

Vzhledem k tomu, že se jedná o nově právní vzor IL, stávající nástroje mohou nesprávně zpracovat přidružená metadata a mají neočekávané chování. Je pravděpodobné, že nástroje narazí na nový vzor metadat, protože rozhraní s static abstract členy se nyní zobrazují na primitivních typech, System.Int32například .

Zavedená verze

.NET 6

Typ zásadní změny

Tato změna může ovlivnit binární kompatibilitu.

Důvod změny

Tato změna byla zavedena, protože neexistuje způsob, jak abstraktovat statické členy a psát generalizovaný kód, který se vztahuje na typy definující tyto statické členy. To bylo obzvláště problematické pro typy členů, které existují pouze ve statické podobě, například operátory.

Aktualizujte všechny nástroje, které využívají binární soubory .NET nebo zdrojový kód jazyka C#, aby se zohlednily nové koncepty členů rozhraní, včetně těch, které teď existují v primitivních static abstract typech .NET.

Ovlivněná rozhraní API

Viz také