C#에서 지정된 개체의 유형(Type)에 대한 핸들을 가져오려면 Type.GetTypeHandle() 메서드를 사용합니다. 이 메서드는 개체의 유형을 가리키는 경량화된 핸들인 RuntimeTypeHandle 구조체를 반환하며, 필요할 경우 Type.GetTypeFromHandle() 메서드를 통해 원래의 Type 개체로 다시 복원할 수 있습니다.
이러한 핸들은 실제 Type 개체를 직접 참조하지 않으면서도 유형 정보를 효율적으로 전달해야 할 때 유용하게 활용됩니다.
예제 1
다음은 System.Type 클래스 자체의 유형 핸들을 가져온 뒤, 이를 다시 Type 개체로 변환하여 해당 형식의 특성(Attributes)과 참조된 유형을 출력하는 예제입니다.
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);
Console.WriteLine("Type Referenced = "+ type);
}
}
출력 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
Attributes = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit
Type Referenced = System.RuntimeType
예제 2
이번에는 double 형식에 대해 동일한 과정을 적용해 보겠습니다.
using System;
public class Demo {
public static void Main() {
Type type1 = typeof(double);
RuntimeTypeHandle typeHandle = Type.GetTypeHandle(type1);
Type type = Type.GetTypeFromHandle(typeHandle);
Console.WriteLine("Attributes = " + type.Attributes);
Console.WriteLine("Type Referenced = "+ type);
}
}
출력 결과
실행 결과는 아래와 같습니다.
Attributes = AutoLayout, AnsiClass, Class, Serializable, BeforeFieldInit
Type Referenced = System.RuntimeType
두 예제 모두 GetTypeHandle로 핸들을 얻은 후 GetTypeFromHandle로 되돌리는 과정을 보여주며, 출력되는 특성 값은 해당 형식이 갖는 공통 속성(AutoLayout, AnsiClass, Serializable 등)을 나타냅니다.