Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 타입 핸들(RuntimeTypeHandle)이 참조하는 타입 가져오는 방법

C#에서 지정된 타입 핸들이 참조하는 타입 가져오기

C#에서는 Type.GetTypeFromHandle() 메서드를 사용하면 지정된 타입 핸들(RuntimeTypeHandle)이 참조하는 실제 타입을 손쉽게 가져올 수 있습니다. 반대로 Type.GetTypeHandle() 메서드를 사용하면 특정 타입에 대한 런타임 타입 핸들을 얻을 수 있습니다.

핵심 메서드 정리

  • Type.GetTypeHandle(object) – 지정된 객체의 타입에 대한 런타임 타입 핸들을 반환합니다.
  • Type.GetTypeFromHandle(RuntimeTypeHandle) – 타입 핸들이 참조하는 타입을 반환합니다.

예제 1

다음 예제에서는 short 타입의 핸들을 구한 뒤, 그 핸들로부터 원래 타입을 다시 가져와서 타입의 특성(Attributes)을 출력합니다.

using System;

public class Demo {
    public static void Main() {
        Type type1 = typeof(short);
        RuntimeTypeHandle typeHandle = Type.GetTypeHandle(type1);
        Type type = Type.GetTypeFromHandle(typeHandle);
        Console.WriteLine("Attributes = " + type.Attributes);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Attributes = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit

예제 2

이번에는 System.Type 타입 자체에 대해 동일한 작업을 수행해 보겠습니다.

using System;

public class Demo {
    public static void Main() {
        Type type1 = typeof(System.Type);
        RuntimeTypeHandle typeHandle = Type.GetTypeHandle(type1);
        Type type = Type.GetTypeFromHandle(typeHandle);
        Console.WriteLine("Attributes = " + type.Attributes);
    }
}

출력 결과

Attributes = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit

두 예제 모두 동일한 특성 값이 출력됩니다. 각 특성이 의미하는 바는 다음과 같습니다.

  • AutoLayout – CLR(공용 언어 런타임)이 클래스의 필드 배치를 자동으로 결정합니다.
  • AnsiClass – 문자열이 ANSI 형식으로 처리됨을 나타냅니다.
  • Class – 해당 타입이 클래스 형식임을 나타냅니다.
  • Serializable – 직렬화가 가능한 타입입니다.
  • BeforeFieldInit – 정적 필드 초기화가 첫 번째 정적 필드 접근 이전에 수행될 수 있음을 나타냅니다.

이처럼 GetTypeHandle()GetTypeFromHandle()은 서로 반대되는 역할을 하는 메서드로, 타입 정보를 핸들 형태로 변환하거나 핸들로부터 원래 타입을 복원할 때 유용하게 활용할 수 있습니다.