2009-12-17 4 views
50

가능한 중복 :
What’s the difference between dynamic(C# 4) and var?VAR 대 동적

.NET 4.0 (VS 2010)의 동적 및 VAR 키워드의 차이점은 무엇입니까. MSDN에 따라 동적 정의는 - 입니다. 동적 조회를 사용하면 메서드, 연산자 및 인덱서 호출, 속성 및 필드 액세스 및 C#의 일반 정적 바인딩을 우회하여 대신 동적으로 확인되는 개체 호출을 작성할 수 있습니다..

var에 대한 정의가 - 인 반면 암시 적으로 유형이 지정된 로컬 변수는 사용자가 유형을 직접 선언 한 것처럼 강력하게 형식화되지만 컴파일러는 유형을 결정합니다.

방법은 아래 코드 맥락이 다르다 :

var 경우
var a1 = new A(); 
a1.Foo(1); 

dynamic a2 = new A(); 
a2.Foo(1); 
+0

참조 http://stackoverflow.com/questions/961581/whats-the-difference-between-dynamicc-4-and-var –

답변

90

var정적 유형을 추론 의미 - 귀하의 경우는 모든 바인딩이 아직 완전히를 정적으로 수행

A a1 = new A(); 

에 정확히 해당합니다. 생성 된 코드를 보면 위의 선언과 완전히 동일합니다.

dynamica2을 사용하는 모든 표현식이 컴파일 타임이 아닌 실행시 바인딩되므로 동적으로 동작 할 수 있음을 의미합니다. 컴파일러는 Foo 메서드가 있는지 여부를 확인하지 않습니다.이 동작은 실행시 결정됩니다. 실제로 객체가 IDynamicMetaObjectProvider을 구현하면 메서드 호출 (또는 다른 종류의 사용)에 응답하여 실행시 호출과 관련하여 결정할 수 있습니다. 즉, "실제"호출이 필요하지 않습니다. 메서드는 Foo이라고합니다.

동적 인 상황에서 생성 된 코드를 보면 전화 사이트와 바인더와 관련된 모든 종류의 이상하고 멋진 것들을 발견 할 수 있습니다.

14

, A는()를 컴파일하는 동안 그것에 .Foo(int) 방법을 가지고있다.

dynamic 경우에는 그렇지 않습니다.

24

var은 유형 유추를 사용한다는 점에서 유형 안전합니다. 쓰기 var a = new A();A a = new A();의 약어입니다. 선언 된 변수 dynamic은 유형 안전이 아니며 컴파일러는 호출하는 메서드가 있는지 확인하기 위해 아무 것도하지 않습니다.