„IntPtr“ wird nicht mehr für Funktionszeigertypen verwendet.
Als neues Reflexionsfeature ist ein Funktionszeigertyp jetzt eine System.Type-Instanz mit neuen Funktionen wie etwa Type.IsFunctionPointer. Bisher war die zurückgegebene System.Type-Instanz eine Instanz vom Typ IntPtr.
Die Verwendung von System.Type auf diese Weise ähnelt der Verfügbarmachung anderer Typen – beispielsweise Zeiger (Type.IsPointer) und Arrays (Type.IsArray).
Diese neue Funktion ist derzeit in der CoreCLR-Runtime und in MetadataLoadContext implementiert. Die Unterstützung der Mono- und NativeAOT-Runtime wird voraussichtlich später implementiert.
Eine Funktionszeigerinstanz, bei der es sich um eine physische Adresse für eine Funktion handelt, wird weiterhin als IntPtr dargestellt. Nur der Reflexionstyp wurde geändert.
Vorheriges Verhalten
Bislang wurde von typeof(delegate*<void>())
für einen Funktionszeigertyp der Typ System.IntPtr zurückgegeben. Analog dazu hat die Reflexion diesen Typ auch für einen Funktionszeigertyp zurückgegeben (beispielsweise mit FieldInfo.FieldType). Der Typ IntPtr ermöglichte keinen Zugriff auf die Parametertypen, auf den Rückgabetyp oder auf die Aufrufkonventionen.
Neues Verhalten
typeof
und Reflexion verwenden jetzt System.Type für einen Funktionszeigertyp. Dies ermöglicht den Zugriff auf die Parametertypen, auf den Rückgabetyp und auf Aufrufkonventionen.
Eingeführt in Version
.NET 8 Preview 2
Typ des Breaking Changes
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Dank dieser Änderung ist es nun möglich, Funktionszeiger-Metadaten wie Parametertypen, Rückgabetyp und Aufrufkonventionen abzurufen. Die Unterstützung von Funktionszeigern wurde mit C# 9 und .NET 5 hinzugefügt. Die Reflexionsunterstützung wurde aber zu diesem Zeitpunkt nicht hinzugefügt.
Empfohlene Maßnahme
Wenn Ihr Code Funktionszeiger unterstützen soll und diese Funktionszeiger speziell behandelt werden sollen, verwenden Sie die neue API Type.IsFunctionPointer.
Betroffene APIs
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für