object


<aside> 💡 모든타입이 상속 받아야하는 최상단 타입

</aside>

그렇기 때문에 모든 타입은 object 타입으로 형 변환이 가능하다.

이때 boxing, unboxing 이 일어난다.

dynamic


루비나 파이썬같은 동적 언어도 .NET프레임워크에서 실행할 수 있게 연동하기위해 나왔다.

var와 비슷해 보이지만 var는 컴파일 빌드 시점에 초기값과 대응되는 타입으로 치환하지만

// var
var d = 5;

d = "test";    // 컴파일 오류 : d == System.Int32로 결정되기 때문에 문자열을 받을 수 없음

d.CallFunc();  // 컴파일 오류 : System.Int32타입에는 CallFunc 메서드가 없음

// dynamic
dynamic d2 = 5;

d2 = "test";   // d2는 형식이 결정되지 않았기 때문에 다시 문자열로 초기화 가능

d2.CallFunc(); // 실행 시에 d2 변수 타입으로 CallFunc를 호출하기 때문에
               // 컴파일 시에는 오류가 발생하지 않는다. 하지만 실행시에는 오류 발생

<aside> 💡 dynamic은 해당 프로그램이 실행되는 시점에 타입을 결정한다.

→ C# 코딩의 기술 기본편에서는 js의 var와 동일한 만능상자이기 때문에 사용을 자제할것을 권장

</aside>

var


메서드의 지역 변수 선언을 타입에 관계없이 var예약어로 쓸 수 있다.

static void Main(string[] args)
{
	int i = 5;
	// C# 컴파일러는 빌드 시점에 j의 타입을 int로 결정하게 된다.
	var j = 6;
}