Partager via


Les types SafeHandle doivent avoir un constructeur public

Historiquement, le passage SafeHandlede types dérivés à P/Invokes et des méthodes COM a implicitement requis un constructeur sans paramètre de toute visibilité lorsqu’un SafeHandletype dérivé est passé en tant que ref paramètre ou out type de retour. L’interopérabilité générée par la source dans .NET 7 a permis ce comportement pour faciliter la migration à partir de DllImportAttributeP/Invokes basés sur des sources. En même temps, nous avons mis à jour la documentation SafeHandle pour indiquer aux implémenteurs de fournir un public constructeur sans paramètre dans leur type dérivé. Cette modification cassante rend cette recommandation requise pour le marshaling généré par la source.

Comportement précédent

Un SafeHandletype dérivé a été requis pour avoir un constructeur sans paramètre de toute visibilité lorsqu’il a été utilisé :

Nouveau comportement

Un SafeHandletype dérivé est requis pour avoir un public constructeur sans paramètre lorsqu’il est utilisé :

Si le type n’a pas de public constructeur sans paramètre, le générateur source d’interopérabilité émet une erreur de compilation.

Version introduite

.NET 8 Preview 5

Type de changement cassant

Cette modification peut affecter la compatibilité source .

Raison de la modification

Les générateurs de sources d’interopérabilité changent pour pousser davantage de code hors des générateurs sources eux-mêmes et dans les bibliothèques .NET principales. Dans le cadre de cette modification, l’équipe d’interopérabilité commence à appliquer les instructions recommandées pour un code d’interopérabilité plus gérable et compréhensible.

Modifiez le constructeur sanspublic paramètre existant sur le SafeHandletype dérivé -comme publicétant .

API affectées