Udostępnij za pośrednictwem


Statyczni abstrakcyjni członkowie zadeklarowani w interfejsach

.NET 6 przedstawia nową funkcję, w której static członkowie interfejsu mogą być oznaczeni jako abstract. Ta funkcja obejmuje kilka zmian specyfikacji ECMA 335, aby umożliwić wzorce metadanych języka pośredniego (IL), które wcześniej zostały uznane za nielegalne. Aby uzyskać więcej informacji, zobacz dotnet/runtime#49558.

Stare zachowanie

Jeśli interfejs statyczny został oznaczony jako abstract:

  • Wygenerowany błąd kompilatora języka C# CS0112.
  • Narzędzia i inne kompilatory wygenerowały niedozwolone metadane IL.

Nowe zachowanie

Począwszy od platformy .NET 6, statyczne elementy członkowskie interfejsu można oznaczyć jako abstract i pomyślnie skompilować. Ponadto wzorce metadanych IL, które są generowane, są obecnie uznawane za legalne ze względu na zmiany specyfikacji ECMA 335.

Implementacja członków interfejsu static abstract jest realizowana przez typy, które go implementują.

Uwaga / Notatka

W przypadku platformy .NET 6 należy włączyć funkcje w wersji zapoznawczej w projekcie, aby móc oznaczyć element członkowski interfejsu jako static abstract.

Ponieważ jest to nowo legalny wzorzec IL, istniejące narzędzia mogą niepoprawnie przetwarzać skojarzone metadane i mieć nieoczekiwane zachowanie. Prawdopodobnie narzędzia napotkają nowy wzorzec metadanych, ponieważ interfejsy z elementami static abstract pojawiają się teraz w typach pierwotnych, na przykład System.Int32.

Wersja wprowadzona

.NET 6

Typ zmiany przełamującej

Ta zmiana może mieć wpływ na zgodność binarną.

Przyczyna zmiany

Ta zmiana została wprowadzona, ponieważ nie było sposobu abstrakcji nad statycznymi elementami członkowskimi i pisania uogólnionego kodu, który ma zastosowanie w różnych typach definiujących te statyczne elementy członkowskie. Było to szczególnie problematyczne w przypadku rodzajów składowych, które istnieją tylko w postaci statycznej, na przykład operatorów.

Zaktualizuj wszystkie narzędzia, które używają plików binarnych platformy .NET lub kodu źródłowego języka C#, aby uwzględnić nową koncepcję elementów członkowskich interfejsu static abstract , w tym te, które istnieją teraz w typach pierwotnych platformy .NET.

Interfejsy API, których dotyczy problem

N/A

Zobacz także