Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
.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.
Zalecana akcja
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