共用方式為


IntPtr 不再用於函式指標型別

作為新的反映功能,函式指標類型現在是具有新功能的System.Type 執行個體,例如 Type.IsFunctionPointer。 先前,傳回的 System.Type 執行個體是 IntPtr 類型。

以這種方式使用 System.Type 的方式類似於其他類型的公開方式,例如指標 (Type.IsPointer) 和陣列 (Type.IsArray)。

新功能目前在 CoreCLR 執行階段和 MetadataLoadContext 中實作。 稍後預期會支援 Mono 和 NativeAOT 執行階段。

函式指標執行個體,即函式的實體位址,會繼續以 IntPtr 表示;僅反映類型已變更。

先前的行為

先前,typeof(delegate*<void>()) 傳回函式指標類型的 System.IntPtr 類型。 同樣地,反映也會針對函式指標類型傳回此類型,例如 使用 FieldInfo.FieldType。 此 IntPtr 類型不允許存取參數類型、傳回型別或呼叫慣例。

新的行為

typeof 和反映現在會將 System.Type 用於函式指標類型,其可讓您存取參數類型、傳回型別和呼叫慣例。

導入的版本

.NET 8 預覽版 2

中斷性變更的類型

此變更為行為變更

變更原因

這項變更新增了取得函式指標中繼資料的功能,包括參數類型、傳回型別和呼叫慣例。 已使用 C# 9 和 .NET 5 新增函式指標支援,但當時並未新增反映支援。

如果您想要讓程式碼支援函式指標,並特別處理這些指標,請使用新的 Type.IsFunctionPointer API。

受影響的 API