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。