Partage via


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

Nouveau comportement

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

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.

Remplacez le constructeur sans paramètre public existant sur le type dérivé de SafeHandle par public.

API affectées