IntPtr n’est plus utilisé pour les types de pointeur de fonction
En tant que nouvelle fonctionnalité de réflexion, un type de pointeur de fonction est désormais une instance de System.Type avec de nouvelles fonctionnalités telles que Type.IsFunctionPointer. Auparavant, l’instance de System.Type retournée correspondait au type IntPtr.
L’utilisation System.Type de cette façon est similaire à la façon dont d’autres types sont exposés, par exemple les pointeurs (Type.IsPointer) et les tableaux (Type.IsArray).
Cette nouvelle fonctionnalité est implémentée dans le runtime CoreCLR et dans MetadataLoadContext. La prise en charge des runtimes Mono et NativeAOT est prévue pour plus tard.
Une instance de pointeur de fonction, qui est une adresse physique d’une fonction, continue d’être représentée sous la forme d’un IntPtr. Seul le type de réflexion a changé.
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 type IntPtr n’autorisait aucun accès aux types de paramètre, au type de retour ou aux conventions d’appel.
typeof
et la réflexion utilisent désormais System.Type pour un type pointeur de fonction, qui permet d’accéder aux types de paramètre, au type de retour et aux conventions d’appel.
.NET 8 Preview 2
Ce changement est un changement de comportement.
Ce changement ajoute la possibilité d’obtenir des métadonnées de pointeur de fonction, notamment les types de paramètre, le type de retour et les conventions d’appel. La prise en charge des pointeurs de fonction a été ajoutée dans C# 9 et .NET 5, mais ce n’est pas le cas de la réflexion.
Si vous souhaitez que votre code prenne en charge les pointeurs de fonction et les traite de manière particulière, utilisez la nouvelle API Type.IsFunctionPointer.
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :