Delen via


SafeHandle-typen moeten openbare constructor hebben

In het verleden heeft het doorgeven SafeHandlevan -afgeleide typen aan P/Invokes en COM-methoden impliciet een parameterloze constructor van elke zichtbaarheid vereist wanneer een -afgeleide type wordt doorgegeven als een SafeHandleref of out parameter of een retourtype. Door de bron gegenereerde interoperabiliteit in .NET 7 heeft dit gedrag toegestaan om eenvoudigere migratie vanuit P/Invokes op basis van DllImportAttributeP/Invokes mogelijk te maken. Tegelijkertijd hebben we de SafeHandle-documentatie bijgewerkt om implementeerfuncties te informeren over een public parameterloze constructor in hun afgeleide type. Deze wijziging die fouten veroorzaakt, maakt die aanbeveling een vereiste voor door de bron gegenereerde marshalling.

Vorig gedrag

Een SafeHandle-afgeleide type was vereist om een parameterloze constructor van elke zichtbaarheid te hebben toen deze werd gebruikt:

Nieuw gedrag

Een SafeHandle-afgeleide type is vereist om een public parameterloze constructor te hebben wanneer deze wordt gebruikt:

Als het type geen parameterloze constructor heeft public , verzendt de interop-brongenerator een compileerfout.

Versie geïntroduceerd

.NET 8 Preview 5

Type wijziging die fouten veroorzaken

Deze wijziging kan van invloed zijn op de broncompatibiliteit.

Reden voor wijziging

De interoperabiliteitsbrongeneratoren veranderen om meer code uit de brongeneratoren zelf en in de kernbibliotheken van .NET te pushen. Als onderdeel van deze wijziging begint het interoperabiliteitsteam de aanbevolen richtlijnen af te dwingen voor beter onderhoudbare en begrijpelijke interop-code.

Wijzig de bestaande niet-parameterlozepublic constructor op het SafeHandleafgeleide type in .public

Betrokken API's