Udostępnij za pośrednictwem


Statyczne abstrakcyjne elementy członkowskie zadeklarowane w interfejsach

Platforma .NET 6 wyświetla podgląd nowej funkcji, w której static elementy członkowskie interfejsu mogą być oznaczone 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 elementów członkowskich interfejsu static abstract jest dostarczana przez typy implementujące interfejs.

Uwaga

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 członkowskimi są teraz wyświetlane w typach pierwotnych, na przykład System.Int32.

Wprowadzona wersja

.NET 6

Typ zmiany powodującej niezgodność

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

Przyczyna wprowadzenia 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.

Dotyczy interfejsów API

Nie dotyczy

Zobacz też