Les types SafeHandle doivent avoir un constructeur public
Historiquement, la transmission SafeHandle de types dérivés à des méthodes P/Invokes et COM nécessite implicitement un constructeur sans paramètre de toute visibilité lorsqu’un type dérivé SafeHandle
est passé en tant que paramètre ref
ou out
ou un 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 P/Invokes basés sur DllImportAttribute. Dans le même temps, nous avons mis à jour la documentation SafeHandle pour indiquer aux développeurs de fournir un public
constructeur sans paramètre dans leur type dérivé. Cette modification majeure rend cette recommandation obligatoire pour le marshaling généré par la source.
Comportement précédent
Un type dérivé de SafeHandle était requis pour avoir un constructeur sans paramètre de toute visibilité lorsqu’il était utilisé :
- En tant que paramètre
ref
ouout
ou un type de retour dans une méthode LibraryImportAttribute -attributed. - Dans une méthode sur une interface GeneratedComInterfaceAttribute -attributed.
Nouveau comportement
Un type dérivé de SafeHandle est requis pour avoir un constructeur sans paramètre public
lorsqu’il est utilisé :
- En tant que paramètre
ref
ouout
ou un type de retour dans une méthode LibraryImportAttribute -attributed. - Dans une méthode sur une interface GeneratedComInterfaceAttribute -attributed.
Si le type n’a pas de constructeur sans paramètre public
, le générateur de source d’interopérabilité émet une erreur de compilation.
Version introduite
.NET 8 Preview 5
Type de changement cassant
Ce changement peut affecter la compatibilité source.
Raison du changement
Les générateurs de sources d’interopérabilité changent pour envoyer plus de code hors des générateurs sources eux-mêmes et dans les bibliothèques .NET principales. Dans le cadre de ce changement, l’équipe d’interopérabilité commence à appliquer les instructions recommandées pour un code d’interopérabilité plus facile à gérer et comprendre.
Action recommandée
Remplacez le constructeur sans paramètre public
existant sur le type dérivé de SafeHandle
par public
.