IntPtr nie jest już używany dla typów wskaźników funkcji
Jako nowa funkcja odbicia typ wskaźnika funkcji jest teraz wystąpieniem System.Type z nowymi możliwościami, takimi jak Type.IsFunctionPointer. System.Type Wcześniej zwrócone wystąpienie było typemIntPtr.
Użycie System.Type w ten sposób jest podobne do sposobu uwidocznienia innych typów, takich jak wskaźniki (Type.IsPointer) i tablice (Type.IsArray).
Ta nowa funkcja jest obecnie implementowana w środowisku uruchomieniowym CoreCLR i w systemie MetadataLoadContext. Obsługa środowisk uruchomieniowych Mono i NativeAOT jest oczekiwana później.
Wystąpienie wskaźnika funkcji, które jest adresem fizycznym funkcji, nadal jest reprezentowane jako IntPtr; tylko typ odbicia uległ zmianie.
Poprzednie zachowanie
typeof(delegate*<void>())
Wcześniej zwrócił System.IntPtr typ wskaźnika funkcji. Podobnie odbicie zwróciło również ten typ dla typu wskaźnika funkcji, na przykład z FieldInfo.FieldType. Typ IntPtr nie zezwalał na dostęp do typów parametrów, zwracanych typów ani konwencji wywoływania.
Nowe zachowanie
typeof
i odbicie są teraz używane System.Type dla typu wskaźnika funkcji, który zapewnia dostęp do typów parametrów, zwracanych typów i konwencji wywoływania.
Wprowadzona wersja
.NET 8 (wersja zapoznawcza 2)
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Ta zmiana dodaje możliwość uzyskiwania metadanych wskaźnika funkcji, w tym typów parametrów, typu zwracanego i konwencji wywoływania. Dodano obsługę wskaźnika funkcji w językach C# 9 i .NET 5, ale w tym czasie nie dodano obsługi odbicia.
Zalecana akcja
Jeśli chcesz, aby kod obsługiwał wskaźniki funkcji i traktować je specjalnie, użyj nowego Type.IsFunctionPointer interfejsu API.