I tipi SafeHandle devono avere un costruttore pubblico
Storicamente, il passaggio di tipi derivati da SafeHandleai metodi P/Invoke e COM ha richiesto implicitamente un costruttore senza parametri di qualsiasi visibilità quando un tipo derivato da SafeHandle
viene passato come parametro ref
o out
o un tipo restituito. L'interoperabilità generata dall'origine in .NET 7 ha consentito questo comportamento per facilitare la migrazione da P/Invoke basati su DllImportAttribute. Allo stesso tempo, è stata aggiornata la documentazione SafeHandle per indicare agli implementatori di fornire un costruttore senza parametri public
nel tipo derivato. Questa modifica che causa un'interruzione rende questa raccomandazione un requisito per il marshalling generato dall'origine.
Comportamento precedente
È stato necessario un tipo derivato da SafeHandle per avere un costruttore senza parametri di qualsiasi visibilità quando è stato usato:
- Come parametro
ref
oout
o come tipo restituito in un metodo con attributi LibraryImportAttribute. - In un metodo su un'interfaccia con attributi GeneratedComInterfaceAttribute.
Nuovo comportamento
È necessario un tipo derivato da SafeHandle per avere un costruttore senza parametri public
quando viene usato:
- Come parametro
ref
oout
o come tipo restituito in un metodo con attributi LibraryImportAttribute. - In un metodo su un'interfaccia con attributi GeneratedComInterfaceAttribute.
Se il tipo non ha un costruttore senza parametri public
, il generatore di origine di interoperabilità genera un errore di compilazione.
Versione introdotta
.NET 8 anteprima 5
Tipo di modifica che causa un'interruzione
Questa modifica può influire sulla compatibilità dell'origine.
Motivo della modifica
I generatori di origine di interoperabilità stanno cambiando per eseguire il 8push di più codice dai generatori di origine stessi e nelle librerie .NET principali. Come parte di questa modifica, il team di interoperabilità sta iniziando a applicare le linee guida consigliate per un codice di interoperabilità più gestibile e comprensibile.
Azione consigliata
Modificare il costruttore senza parametri public
esistente nel tipo derivato da SafeHandle
in modo che sia public
.