Delen via


IntPtr wordt niet meer gebruikt voor functiepointertypen

Als nieuwe weerspiegelingsfunctie is een functiepointertype nu een System.Type exemplaar met nieuwe mogelijkheden, zoals Type.IsFunctionPointer. Voorheen was het System.Type geretourneerde exemplaar het IntPtr type.

Het gebruik System.Type op deze manier is vergelijkbaar met de manier waarop andere typen worden weergegeven, zoals aanwijzers (Type.IsPointer) en matrices (Type.IsArray).

Deze nieuwe functionaliteit wordt momenteel geïmplementeerd in de CoreCLR-runtime en in MetadataLoadContext. Ondersteuning voor de Mono- en NativeAOT-runtimes wordt later verwacht.

Een functieaanwijzerexemplaren, een fysiek adres voor een functie, worden nog steeds weergegeven als een IntPtr; alleen het weerspiegelingstype is gewijzigd.

Vorig gedrag

Eerder werd typeof(delegate*<void>()) het System.IntPtr type voor een functie-aanwijzer geretourneerd. Op dezelfde manier heeft weerspiegeling dit type ook geretourneerd voor een functiepointertype, zoals bij FieldInfo.FieldType. Het IntPtr type heeft geen toegang tot de parametertypen, retourtype of aanroepende conventies toegestaan.

Nieuw gedrag

typeof en weerspiegeling nu System.Type voor een functiepointertype, dat toegang biedt tot de parametertypen, retourtype en aanroepende conventies.

Versie geïntroduceerd

.NET 8 Preview 2

Type wijziging die fouten veroorzaken

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Met deze wijziging wordt de mogelijkheid toegevoegd om metagegevens van functie-aanwijzers te verkrijgen, waaronder parametertypen, het retourtype en de aanroepende conventies. Ondersteuning voor functiepointer is toegevoegd met C# 9 en .NET 5, maar weerspiegelingsondersteuning is op dat moment niet toegevoegd.

Als u wilt dat uw code functiepointers ondersteunt en deze speciaal behandelt, gebruikt u de nieuwe Type.IsFunctionPointer API.

Betrokken API's