Aracılığıyla paylaş


IntPtr artık işlev işaretçisi türleri için kullanılmıyor

Yeni bir yansıma özelliği olarak işlev işaretçisi türü artık gibi System.Typeyeni özelliklere sahip bir Type.IsFunctionPointer örnektir. Daha önce döndürülen System.Type nesne IntPtr türündeydi.

Bu şekilde System.Type kullanmak, işaretçiler (Type.IsPointer) ve diziler (Type.IsArray) gibi diğer türlerin kullanımına sunulma şekline benzer.

Bu yeni özellik şu anda CoreCLR çalışma zamanında ve MetadataLoadContext içinde uygulanmaktadır. Mono ve NativeAOT çalışma zamanları için destek daha sonra beklenir.

bir işlevin fiziksel adresi olan bir işlev işaretçisi örneği, bir IntPtrolarak temsil edilmeye devam eder; yalnızca yansıma türü değişmiştir.

Önceki davranış

Daha önce, bir işlev işaretçi türü typeof(delegate*<void>()) türünü döndürmüştü. Benzer şekilde, yansıma da FieldInfo.FieldType örneği gibi bir işlev işaretçisi türü için bu türü döndürdü. Türü IntPtr parametre türlerine, dönüş türüne veya çağırma kurallarına erişime izin vermedi.

Yeni davranış

typeof ve yansıma artık bir işlev işaretçisi türü olarak System.Type kullanır ve bu, parametre türleri, dönüş türü ve çağırma kurallarına erişim sağlar.

Sürüm kullanıma sunulmuştur

.NET 8 Önizleme 2

Kesinti yaratan değişiklik türü

Bu değişiklik davranışsal bir değişikliktir.

Değişiklik nedeni

Bu değişiklik parametre türleri, dönüş türü ve çağırma kuralları dahil olmak üzere işlev işaretçisi meta verilerini alma özelliğini ekler. İşlev işaretçisi desteği C# 9 ve .NET 5 ile eklendi, ancak yansıma desteği o sırada eklenmedi.

Kodunuzun işlev işaretçilerini desteklemesini ve bunları özel olarak işlemesini istiyorsanız yeni Type.IsFunctionPointer API'yi kullanın.

Etkilenen API'ler