C# typeof, GetType()

Featured image

Git Source


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로 떨어지는 점을 주의하여 개발하자.