Condividi tramite


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 SafeHandleviene 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:

Nuovo comportamento

È necessario un tipo derivato da SafeHandle per avere un costruttore senza parametri public quando viene usato:

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.

Modificare il costruttore senza parametri public esistente nel tipo derivato da SafeHandle in modo che sia public.

API interessate