IntPtr non viene più usato per i tipi di puntatore a funzione
Come nuova funzionalità di reflection, un tipo di puntatore a funzione è ora un'istanza System.Type con nuove funzionalità, ad esempio Type.IsFunctionPointer. In precedenza, l'istanza System.Type restituita era il tipo IntPtr.
L'uso di System.Type in questo modo è simile alla modalità di esposizione di altri tipi, ad esempio puntatori (Type.IsPointer) e matrici (Type.IsArray).
Questa nuova funzionalità è attualmente implementata nel runtime CoreCLR e in MetadataLoadContext. Il supporto per i runtime Mono e NativeAOT è previsto in un secondo momento.
Un'istanza del puntatore di funzione, ovvero un indirizzo fisico a una funzione, continua a essere rappresentata come un oggetto IntPtr. Solo il tipo di reflection è stato modificato.
Comportamento precedente
In precedenza, typeof(delegate*<void>())
ha restituito il tipo System.IntPtr per un tipo di puntatore a funzione. Analogamente, la reflection ha restituito anche questo tipo per un tipo di puntatore a funzione, ad esempio con FieldInfo.FieldType. Il tipo IntPtr non ha consentito l'accesso ai tipi di parametro, al tipo restituito o alle convenzioni di chiamata.
Nuovo comportamento
typeof
e reflection ora usano System.Type per un tipo di puntatore a funzione, che fornisce l'accesso ai tipi di parametro, al tipo restituito e alle convenzioni di chiamata.
Versione introdotta
.NET 8 Preview 2
Tipo di modifica che causa un'interruzione
Questa è una modifica funzionale.
Motivo della modifica
Questa modifica aggiunge la funzionalità per ottenere metadati del puntatore a funzione, inclusi i tipi di parametro, il tipo restituito e le convenzioni di chiamata. Il supporto del puntatore a funzione è stato aggiunto con C# 9 e .NET 5, ma il supporto della reflection non è stato aggiunto in quel momento.
Azione consigliata
Se si vuole che il codice supporti i puntatori a funzione e li consideri in modo speciale, usare la nuova API Type.IsFunctionPointer.