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. Eerder was de geretourneerde System.Type instantie van 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 functieaanwijzerinstantie, die een fysiek adres naar een functie is, wordt nog steeds weergegeven als een IntPtr; alleen het reflectietype is gewijzigd.

Vorig gedrag

Voorheen retourneerde typeof(delegate*<void>()) het System.IntPtr type voor een functieaanwijzertype. Op dezelfde manier retourneerde reflectie ook dit type 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 reflectie gebruiken nu System.Type voor een functiepointer type, dat toegang biedt tot de parametertypen, returntype en aanroepconventies.

Geïntroduceerde versie

.NET 8 Preview 2

Type van brekende verandering

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.

Betreffende API's