[출처] C#의 다양한 타입(type) 선언 : var vs. dynamic vs. object|작성자 SuYoung Kim
From : http://blog.naver.com/PostView.nhn?blogId=dotnethelper&logNo=60178694913

object

어떠한 타입이라도 변수로 선언하여 사용할 수 있다. 단 값 형식(value type)을 참조형식(reference type)으로 다시 참조형식을 값 형식으로 형 변환을 할 경우 박싱(boxing : 값형식 -> 참조형식), 언박싱(unboxing : 참조형식 -> 값형식) 과정이 일어나며, 성능상 영향을 미칠 수 있다.

var

var(Local Variable Type)은 C# 3.0에서 처음 등장한 것으로 var로 선언된 변수는 닷넷에서 제공하는 대부분의 형식 사용할 수 있다. var 형식은 기존에 닷넷에서 존재하는 형식에서 사용하기 보다는 익명 형식(anonymous type)을 위해 탄생했다고 봐도 될 것이다. 익명 형식은 아래 코드처럼 타입의 이름을 지정하지 않고 사용 시점에 바로 바로 선언하여 객체로 사용할 수 있다. 하지만 기존 언어적 특성에서는 모든 타입은 명시적으로 선언되어야만 사용할 수 있었다. 이러한 점을 해결하고자 var 형식이 나오게 되었다. var 형식은 최초 초기화되어 타입이 정해진 이후에는 타입을 변경할 수 없다. 그러므로 null로는 초기화 할 수 없다. 반드시 선언 시점에 특정 타입으로 초기화 되어야 한다. var 타입은 선언 시점에서 타입을 추정하기 때문에 IDE에서 해당 타입에 맞는 인텔리센스가 완벽하게 지원 된다.

dynamic

C# 4.0에 오면서 상호 운영성(interop)에 대한 부분이 많이 강조가 되었다. C#과 VB, COM등 과의 연동 등 기존의 복잡함을 dynamic 타입을 통해서 개발 시점에 많이 간결하게 처리가 가능하다. dynamic 타입은 컴파일 시점에 타입에 대한 확인을 하지 않기 때문에 개발 시점에서 인텔리센스는 동작하지 않는다.

var vs. dynamic vs. object 무엇이 다른가?

( var, dynamic) vs. object
공통점 : 선언 시점에 다양한 타입을 지정할 수 있다.
차이점 : var, dynamic 타입은 선언된 원본 형식을 유지한다. 하지만 object 으로 선언을 하게 되면 원본의 특성을 읽어 버리게 된다. object로 선언 되었다가 원본 형식으로 바꾸기 위해서는 반드시 형변환 처리가 필요하다. 아래 각 타입으로 선언시 인텔리센스 화면을 보면 그 차이를 좀더 확실히 확인이 가능하다.
var vs. dynamic
공통점 : 닷넷에서 지원하는 대부분의 타입을 선언할 수 있으며, 원본 타입의 특정을 가지고 있다.
차이점 : 두 타입에서 가장 큰 차이점은 타입이 확정 되는 시점이다. var 타입은 컴파일 시점에 이미 타입을 추정하여 확정을 하게 된다. 하지만 dynamic 타입은 런타임 시점이 타입이 확정되게 된다. 그러므로 dynamic 형식으로 사용하는 값이 올바르지 않은 타입이 지정이 되더라도 컴파일 시점에서는 모두 by-pass 되며, 런타임 시점에 예외를 발생하게 된다. 이점을 유의 해야 된다.