IntPtr ya no se usa para los tipos de puntero de función
Como nueva característica de reflexión, un tipo de puntero de función es ahora una instancia System.Type con nuevas funcionalidades, como Type.IsFunctionPointer. Anteriormente, la instancia System.Type devuelta era el tipo IntPtr.
El uso System.Type de esta manera es similar a cómo se exponen otros tipos, como punteros (Type.IsPointer) y matrices (Type.IsArray).
Esta nueva funcionalidad se implementa actualmente en el entorno de ejecución de CoreCLR y en MetadataLoadContext. Se espera compatibilidad con los entornos de ejecución Mono y NativeAOT más adelante.
Una instancia de puntero de función, que es una dirección física a una función, continúa representándose como IntPtr; solo ha cambiado el tipo de reflexión.
Comportamiento anterior
Anteriormente, typeof(delegate*<void>())
devolvía el tipo System.IntPtr de un tipo de puntero de función. De forma similar, la reflexión también devolvió este tipo para un tipo de puntero de función, como con FieldInfo.FieldType. El tipo IntPtr no permitió ningún acceso a los tipos de parámetro, al tipo de valor devuelto ni a las convenciones de llamada.
Comportamiento nuevo
typeof
y la reflexión ahora usan System.Type para un tipo de puntero de función, que proporciona acceso a los tipos de parámetros, el tipo de valor devuelto y las convenciones de llamada.
Versión introducida
.NET 8 Versión preliminar 2
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
Este cambio agrega la capacidad de obtener metadatos de puntero de función, incluidos los tipos de parámetro, el tipo de valor devuelto y las convenciones de llamada. La compatibilidad con el puntero de función se agregó con C# 9 y .NET 5, pero la compatibilidad con la reflexión no se agregó en ese momento.
Acción recomendada
Si desea que el código admita punteros de función y tratarlos especialmente, use la nueva API Type.IsFunctionPointer.