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 SafeHandle
typ 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:
ref
Jako parametr lubout
typ zwracany w metodzie LibraryImportAttribute-atrybut.- W metodzie w interfejsie GeneratedComInterfaceAttribute-atrybut.
Nowe zachowanie
SafeHandleTyp -pochodny jest wymagany do posiadania public
konstruktora bez parametrów, gdy jest używany:
ref
Jako parametr lubout
typ zwracany w metodzie LibraryImportAttribute-atrybut.- W metodzie w interfejsie GeneratedComInterfaceAttribute-atrybut.
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.
Zalecana akcja
Zmień istniejący konstruktor bezpublic
parametrów w typie pochodnym SafeHandle
na public
.