Type
Value Type
- 값이 바로 할당되는 타입
- 직접 값을 가지고 있다
- int, float, char 등이 이에 해당한다
- System.ValueType으로부터 상속
Reference Type
- 데이터를 직접 가지고 있지 않고, 변수의 주소값을 가지고 있다
- 즉, 주소 공간의 위치를 참조한다
- 하나의 주소 공간을 참조하는 여러 개의 변수를 사용할 수 있다
- Pointer의 작동 방식과 동일하다고 볼 수 있다
Object Type
- C#에서 모든 타입의 root가 되는 base class이자 Type이다
- CTS(Common Type System)
- 어떤 타입으로든지 캐스팅을 통해 할당될 수 있다
- 값 타입이 object type으로 변환될 때를 boxing
- object type이 값 타입으로 변환될 때를 unboxing이라 한다
Dynamic Type
- 어떤 타입의 값이든지 이에 할당할 수 있다
dynamic a = 20;
- object type과 유사하지만, type checking이 런타임에 이루어진다
- object type은 컴파일 타임에 type checking한다
String Type
- string 타입과 System.String 타입은 동일
- 역시 object type으로부터 상속된다
- 두 가지 형식으로 할당이 가능하다
String str = "asdf";
str = @"asdf";
그 외
- 유저 정의의 class, delegate, interface 등이 있다
Pointer Type
- C 혹은 C++의 포인터와 동일하게 작동한다
- 몇가지 조건 하에…
typeof와 GetType의 차이
typeof
- 클래스 자체의 타입을 반환
class Animal {}
System.Type t1 = typeof(Animal); // t1에 Animal이 타입으로서 반환
GetType
- 런타임시 생성되는 객체 본래의 타입을 반환
class Animal {}
class Dog : Animal {}
void PrintType (Animal a)
{
bool b1 = a.GetType() == typeof(Animal); // a 인자의 본래 타입은 Dog -> false
bool b2 = a is Animal; // a 인자의 클래스는 Animal이기도 함
bool b3 = a.GetType() == typeof(Dog); // a 인자의 본래 타입은 Dog -> True
}
Dog d = new Dog();
PrintType(d);