C#의 모든 형식은 실행 시점에서 System.Type의 인스턴스로 표현이 된다. 두 가지 방법으로 Type객체를 얻을 수 있다.
-
인스턴스에 대해 GetType을 호출한다.
-
형식 이름에 대해 Typeof연산자를 호출한다.
이 두가지의 큰 차이점은 GetType은 실행 시점에서 평가되는 반면에 typeof는 컴파일 시점에서 정적으로 평가된다.(제네릭 형식은 JIT(just-in-time compilation)컴파일러가 결정한다.)
1. GetType
GetType을 실행해 보면 현재 인스턴스의 타입을 가져오고 있다. (자칫 클래스 이름을 가져온다고 생각할 수 있지만 타입이다 타입)
그러면 아래 실행결과는 어떤값을 보내줄까?
int형인 x의 타입이니 Int32를 보내준다.
Name을 사용하면 타입을 string값으로 받을 수 있다.
1. typeof
형식에 대한 System.Type개체를 얻는데 사용된다.
이렇게 타입형식을 참조할 수 있다.
이 두개의 차이점은?
이 두개의 실행결과를 예상해 보자. 정답은 위에서부터 각각 true, false, true, true, false다.
첫 번째는 타입을 비교하고 두 번째는 인스턴스를 비교하고 있다. child로 같은 타입이기 때문에 true이다.
두 번째는 Object.Equals를 이용해 인스턴스가 같은지를 비교하고 있다. new를 이용해 새로운 생성자 인스턴스를 리턴해주고 있기 때문에 c와 c2는 같지 않다.
세 번째는 c와 c2모두 같은 타입이고 typeof은 타입을 반환하기 때문에 '==' 비교는 true를 출력하고 다섯 번째는 다른 타입과 비교를 하고 있어 false를 출력한다.
'프로그래밍언어 > C#' 카테고리의 다른 글
20200224[C#] 제네릭 제약_1 (0) | 2020.02.24 |
---|---|
20200220[C#] 제네릭 (0) | 2020.02.20 |
20200218[C#] Object형식, 박싱 언박싱 (0) | 2020.02.18 |
20200217[C#] 생성자와 상속 (0) | 2020.02.17 |
20200214[C#] 상속된 멤버 숨기기 (0) | 2020.02.14 |