Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En tant que nouvelle fonctionnalité de réflexion, un type de pointeur de fonction est maintenant une System.Type instance avec de nouvelles fonctionnalités telles que Type.IsFunctionPointer. Auparavant, l’instance System.Type retournée était le IntPtr type.
L’utilisation System.Type de cette façon est similaire à la façon dont d’autres types sont exposés, tels que les pointeurs (Type.IsPointer) et les tableaux (Type.IsArray).
Cette nouvelle fonctionnalité est actuellement implémentée dans le runtime CoreCLR et dans MetadataLoadContext. La prise en charge des runtimes Mono et NativeAOT est attendue ultérieurement.
Une instance de pointeur de fonction, qui est une adresse physique à une fonction, continue d’être représentée en tant que IntPtr; seul le type de réflexion a changé.
Comportement précédent
Auparavant, typeof(delegate*<void>()) retournait le type System.IntPtr pour un type de pointeur de fonction. De même, la réflexion a également retourné ce type pour un type de pointeur de fonction, par exemple avec FieldInfo.FieldType. Le IntPtr type n’a autorisé aucun accès aux types de paramètres, au type de retour ou aux conventions d’appel.
Nouveau comportement
typeof et la réflexion utilisent désormais System.Type pour un type de pointeur de fonction, fournissant l’accès aux types de paramètres, au type de retour et aux conventions d'appel.
Version introduite
.NET 8 Preview 2
Type de changement cassant
Ce changement est un changement de comportement.
Raison de la modification
Cette modification ajoute la possibilité d’obtenir des métadonnées de pointeur de fonction, notamment les types de paramètres, le type de retour et les conventions d’appel. La prise en charge des pointeurs de fonction a été ajoutée avec C# 9 et .NET 5, mais la prise en charge de la réflexion n’a pas été ajoutée à ce moment-là.
Action recommandée
Si vous souhaitez que votre code prend en charge les pointeurs de fonction et les traite spécialement, utilisez la nouvelle Type.IsFunctionPointer API.