Udostępnij za pośrednictwem


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.

Jeśli chcesz, aby kod obsługiwał wskaźniki funkcji i traktować je specjalnie, użyj nowego Type.IsFunctionPointer interfejsu API.

Dotyczy interfejsów API