<aside> 💡 모든타입이 상속 받아야하는 최상단 타입
</aside>
그렇기 때문에 모든 타입은 object 타입으로 형 변환이 가능하다.
이때 boxing, unboxing 이 일어난다.
루비나 파이썬같은 동적 언어도 .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예약어로 쓸 수 있다.
static void Main(string[] args)
{
int i = 5;
// C# 컴파일러는 빌드 시점에 j의 타입을 int로 결정하게 된다.
var j = 6;
}