Typy SafeHandle musí mít veřejný konstruktor.

Historicky předávání typů odvozených z SafeHandle do P/Invoke a metod COM implicitně vyžadovalo konstruktor bez parametrů a jakékoli viditelnosti, když je typ odvozený z SafeHandle předán jako parametr ref nebo out nebo jako návratový typ. Zprostředkování komunikace generované zdrojovým kódem v .NET 7 umožnilo toto chování pro snadnější migraci z P/Invokes založených na DllImportAttribute. Současně jsme aktualizovali dokumentaci SafeHandle tak, aby implementátoři poskytovali konstruktor bez parametrů ve svých odvozených typech. Tato zásadní změna činí z tohoto doporučení požadavek pro serializaci generovanou zdrojem.

Předchozí chování

Odvozený typ SafeHandle byl potřeboval mít konstruktor bez parametrů s jakoukoli viditelností při použití:

Nové chování

Odvozený SafeHandlepublic typ je nutný k tomu, aby při použití měl konstruktor bez parametrů:

Pokud typ nemá public konstruktor bez parametrů, generátor zdrojů interoperability vygeneruje chybu kompilace.

Verze byla představena

.NET 8 Preview 5

Typ zásadní změny

Tato změna může ovlivnit kompatibilitu zdroje.

Důvod změny

Generátory zdrojového kódu pro interoperabilitu se mění, aby přesunuly více kódu ze samotných generátorů do základních knihoven .NET. V rámci této změny začíná tým pro interoperabilitu vynucovat doporučené pokyny pro udržovatelný a srozumitelnější interoperabilní kód.

Změňte existující konstruktor bez parametrů u typu odvozeného z public, aby byl SafeHandle.

Ovlivněná rozhraní API