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.
Doporučená akce
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
–