새로운 '동적'C# 4.0 키워드가 'var'키워드를 더 이상 사용하지 않습니까?

StackOverflow https://stackoverflow.com/questions/298277

  •  08-07-2019
  •  | 
  •  

문제

C# 4.0이 나오면 이에 설명 된대로 동적 키워드가 있습니다. Anders Hejlsberg의 훌륭한 프레젠테이션, (C#은 내가 유지할 수있는 것보다 빠르게 발전하고 있습니다 .. 나는 VAR 키워드에 대해 자신을 아는 데 시간이 많지 않았습니다)

여전히 VAR 키워드가 필요합니까? var가 할 수있는 일이 있습니까? 그 역학은 할 수 없습니까?

var x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x

dynamic x = SomeFunctionThatIKnowReturnsSomeKindOfList();
// do something with x
도움이 되었습니까?

해결책

아니요, 그들은 매우 다릅니다.

var "컴파일 타임에서 변수의 유형을 추론" - 그러나 여전히 통계적으로 결합되어 있습니다.

dynamic "이 변수로 원하는 것을 할 수 있다고 가정" - 즉 컴파일러는 어떤 작업을 사용할 수 있는지 모르고 DLR이 전화를 걸 겠다는 것을 의미합니다. 진짜 실행 시간을 의미합니다.

나는 사용할 것으로 기대한다 dynamic 매우 드물게 - 내가 진정으로 역동적 인 행동을 원할 때만 :

  • var 컴파일 타임에 오타 등을 잡을 수 있습니다
  • 정적으로 바인딩 코드는 동적으로 결합 된 코드보다 항상 더 빨리 실행됩니다 (차이가 합리적으로 작아 지더라도)
  • 정적으로 바인딩 코드는 오류 이상으로 더 많은 컴파일 타임 지원을 제공합니다. 통화 계층 구조를 찾을 수 있습니다. 리팩토링은 더 잘 작동하며 Intellisense를 사용할 수 있습니다.

다른 팁

동적과 Var는 완전히 다른 두 가지 아이디어를 나타냅니다.

var

var는 본질적으로 컴파일러에게 할당 문의 오른쪽 표현식에 기초하여 변수의 유형을 파악하도록 요청합니다. 그런 다음 변수는 표현 유형으로 명시 적으로 선언 된 것처럼 정확하게 처리됩니다. 예를 들어 다음 두 진술은 동일합니다

var a = "foo";
string a = "foo";

여기서 가져가는 열쇠는 "var"는 100% 유형의 안전이며 컴파일 시간 작동이라는 것입니다.

동적

동적은 여러면에서 var와 정반대입니다. 동적 사용은 본질적으로 특정 변수의 모든 유형 안전을 제거합니다. 그것은 유형이없는 여러 가지 방법입니다. 변수의 메소드 또는 필드를 호출 할 때 해당 필드를 호출하는 방법에 대한 결정은 런타임에 발생합니다. 예를 들어

dynamic d = SomeOperation();
d.Foo(); // Will this fail or not?  Won't know until you run the program

여기서 빼앗아 갈 열쇠는 "동적"이 타입 안전하지 않으며 런타임 작업이라는 것입니다.

예, 여전히 var :

var a 변하기 쉬운 컴파일러에 의해 유형이 추론됩니다.
동적 런타임에 유형이 할당됩니다

그래서:

Var i = "Hello World"

지성을 수행 할 때 문자열 유형으로 유형을 유추 할 것입니다.

i.Split("/")

반면:

dynamic i = "Hello World"

Complier DOS는 아직 어떤 유형인지 알지 못하지만 여전히 할 수 있기 때문에 런타임까지 유형을 추론하지 않습니다.

i.Split("/")

그러나 필요한 메소드를 호출하면 유형이 잘못되었고 메소드가 없기 때문에 실패 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top