Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Historicamente, passar tipos derivados de SafeHandle para métodos P/Invokes e COM exigia implicitamente um construtor sem parâmetros de qualquer visibilidade quando um tipo derivado de SafeHandle era passado como um parâmetro ref ou out ou um tipo de retorno. A interoperabilidade gerada pela origem no .NET 7 e permitiu que esse comportamento possibilitasse uma migração mais fácil de P/Invokes baseados em DllImportAttribute. Ao mesmo tempo, atualizamos a documentação do SafeHandle para orientar os implementadores a fornecerem um public construtor sem parâmetros em seu tipo derivado. Essa alteração significativa torna essa recomendação um requisito para o marshalling gerado pela origem.
Comportamento anterior
Um tipo derivado de SafeHandle era necessário para ter um construtor sem parâmetros de qualquer visibilidade quando era usado:
- Como um parâmetro
refououtou um tipo de retorno em um método atribuído a LibraryImportAttribute. - Em um método em uma interface atribuída a GeneratedComInterfaceAttribute.
Novo comportamento
Um tipo derivado de SafeHandle é necessário para ter um construtor public sem parâmetros quando é usado:
- Como um parâmetro
refououtou um tipo de retorno em um método atribuído a LibraryImportAttribute. - Em um método em uma interface atribuída a GeneratedComInterfaceAttribute.
Se o tipo não tiver um construtor sem parâmetros public, o gerador de fonte de interoperabilidade emitirá um erro de compilação.
Versão introduzida
.NET 8 Versão Prévia 5
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade da origem.
Motivo da alteração
Os geradores de origem de interoperabilidade estão mudando para enviar mais código dos próprios geradores de origem para as bibliotecas principais do .NET. Como parte dessa alteração, a equipe de interoperabilidade está começando a impor as diretrizes recomendadas para um código de interoperabilidade mais sustentável e compreensível.
Ação recomendada
Altere o construtor não public sem parâmetros existente no tipo derivado SafeHandle para ser public.