Udostępnij za pośrednictwem


Sejf Występnikihandle muszą mieć publiczny konstruktor

Historycznie przekazywanie SafeHandletypów pochodnych do metod P/Invoke i COM niejawnie wymaga konstruktora bez parametrów dowolnej widoczności, gdy SafeHandletyp pochodny jest przekazywany jako ref parametr lub out lub typ zwracany. Międzyoperacyjności generowane przez źródło na platformie .NET 7 umożliwiły łatwiejsze migracje z opartych na DllImportAttributeźródle wywołań P/Invoke. Jednocześnie zaktualizowaliśmy dokumentację Sejf Handle, aby poinformować implementatorów o udostępnieniu konstruktora public bez parametrów w ich typie pochodnym. Ta zmiana powodująca niezgodność sprawia, że zalecenie jest wymaganiem dla marshallingu generowanego przez źródło.

Poprzednie zachowanie

Typ SafeHandle-pochodny był wymagany do posiadania konstruktora bez parametrów dowolnej widoczności , gdy został użyty:

Nowe zachowanie

SafeHandleTyp -pochodny jest wymagany do posiadania public konstruktora bez parametrów, gdy jest używany:

Jeśli typ nie ma public konstruktora bez parametrów, generator źródła międzyoperacyjności emituje błąd kompilacji.

Wprowadzona wersja

.NET 8 (wersja zapoznawcza 5)

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność źródła.

Przyczyna wprowadzenia zmiany

Generatory źródeł międzyoperacyjnych zmieniają się, aby wypychać więcej kodu z samych generatorów źródłowych i do podstawowych bibliotek platformy .NET. W ramach tej zmiany zespół międzyoperaciowy zaczyna wymuszać zalecane wytyczne dotyczące bardziej czytelnego i zrozumiałego kodu międzyoperaciowego.

Zmień istniejący konstruktor bezpublic parametrów w typie pochodnym SafeHandlena public.

Dotyczy interfejsów API