Statiska abstrakta medlemmar deklarerade i gränssnitt

.NET 6 förhandsgranskar en ny funktion där static gränssnittsmedlemmar kan markeras som abstract. Den här funktionen omfattar flera ändringar i ECMA 335-specifikationen för att tillåta metadatamönster för mellanliggande språk (IL) som tidigare ansågs vara olagliga. Mer information finns i dotnet/runtime#49558.

Gammalt beteende

Om ett statiskt gränssnitt har markerats som abstract:

  • C#-kompilatorn genererade felet CS0112.
  • Verktyg och andra kompilatorer genererade olagliga IL-metadata.

Nytt beteende

Från och med .NET 6 kan statiska gränssnittsmedlemmar markeras som abstract och kompileras. Dessutom anses de IL-metadatamönster som genereras nu vara lagliga på grund av ändringar i ECMA 335-specifikationen.

Implementeringen av static abstract gränssnittsmedlemmar tillhandahålls av typer som implementerar gränssnittet.

Anmärkning

För .NET 6 måste du aktivera förhandsgranskningsfunktioner i projektet för att kunna markera en gränssnittsmedlem som static abstract.

Eftersom det här är ett nyligen lagligt IL-mönster kan befintliga verktyg felaktigt bearbeta associerade metadata och ha oväntat beteende. Det är troligt att verktyg kommer att stöta på det nya metadatamönstret, eftersom gränssnitt med static abstract medlemmar nu visas på de primitiva typerna, till exempel System.Int32.

Version lanserad

.NET 6

Typ av brytande ändring

Den här ändringen kan påverka binär kompatibilitet.

Orsak till ändring

Den här ändringen infördes eftersom det inte fanns något sätt att abstrahera över statiska medlemmar och skriva generaliserad kod som gäller för olika typer som definierar dessa statiska medlemmar. Detta var särskilt problematiskt för medlemstyper som bara finns i statisk form, till exempel operatorer.

Uppdatera alla verktyg som använder .NET-binärfiler eller C#-källkod för att ta hänsyn till det nya begreppet gränssnittsmedlemmar static abstract , inklusive de som nu finns på .NET-primitiva typer.

Berörda API:er

Inte tillgänglig

Se även