1 min to read
C# typeof, GetType()
C#의 모든 형식은 System.Type으로 표현되어있다.
두 가지 방법으로 Type객체를 얻어올 수 있으며 typeof와 GetType()이 있다.
typeof - 아규먼트에 명시된 클래스의 이름의 type을 가져온다.
- 인스턴스를 생성하지 않고 사용할 수 있다.
- 컴파일 시점에 평가된다.
GetType() - new 키워드로 생성한 인스턴스의 type을 가져온다.
- 객체가 인스턴스화된 경우에만 사용할 수 있다.
- 런타임 시점에 평가된다.
제네릭 타입은 JIT 컴파일러에서 결정이 된다.
e.g) type 사용 및 비교 예시
class Program
{
static void Main(string[] args)
{
Parent child = new Child();
Compare(child);
}
private static void Compare(Parent obj)
{
Parent newChild = new Child();
// false
Console.WriteLine(obj.GetType() == typeof(Parent));
// true
Console.WriteLine(obj.GetType() == typeof(Child));
// true
Console.WriteLine(obj.GetType() == newChild.GetType());
}
}
class Parent { }
class Child : Parent { }
Compare 메서드의 파라메터 타입이 Parent여도 메서드 호출 시 아규먼트의 타입은 Child이라는 점.
그로 인해 GetType을 호출하면 생성된 인스턴스의 type(Child)과 typeof(Parent)로 비교하기 때문에 false로 떨어지는 점을 주의하여 개발하자.