다음을 통해 공유


함수 포인터 형식에 더 이상 IntPtr이 사용되지 않음

새로운 리플렉션 기능으로, 함수 포인터 유형은 이제 Type.IsFunctionPointer와 같은 새로운 기능을 가진 System.Type 인스턴스입니다. 이전에는 반환된 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를 사용합니다.

영향을 받는 API