IntPtr används inte längre för funktionspekartyper
Som en ny reflektionsfunktion är en funktionspekartyp nu en System.Type instans med nya funktioner som Type.IsFunctionPointer. Tidigare var den System.Type returnerade instansen IntPtr typen.
Att använda System.Type på det här sättet liknar hur andra typer exponeras, till exempel pekare (Type.IsPointer) och matriser (Type.IsArray).
Den här nya funktionen implementeras för närvarande i CoreCLR-körningen och i MetadataLoadContext. Stöd för Mono- och NativeAOT-körningar förväntas senare.
En funktionspekarinstans, som är en fysisk adress till en funktion, fortsätter att representeras som en IntPtr. Endast reflektionstypen har ändrats.
Tidigare beteende
typeof(delegate*<void>())
Tidigare returnerade du System.IntPtr typen för en funktionspekartyp. På samma sätt returnerade reflektion även den här typen för en funktionspekartyp, till exempel med FieldInfo.FieldType. Typen IntPtr tillät inte åtkomst till parametertyper, returtyp eller anropskonventioner.
Nytt beteende
typeof
och reflektion används System.Type nu för en typ av funktionspekare, som ger åtkomst till parametertyper, returtyp och anropskonventioner.
Version introducerad
.NET 8 Preview 2
Typ av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Den här ändringen lägger till funktionen för att hämta metadata för funktionspekare, inklusive parametertyper, returtyp och anropskonventioner. Stöd för funktionspekare lades till med C# 9 och .NET 5, men reflektionsstöd lades inte till vid den tidpunkten.
Rekommenderad åtgärd
Om du vill att koden ska stödja funktionspekare och behandla dem särskilt använder du det nya Type.IsFunctionPointer API:et.