2017-01-11 7 views
-3

직장 동료 동료들 중 일부는 var의 사용법을 조사하고 왜 사용해야하는지/사용해야하지 않는지 검토하고 있습니다.명시 적으로 입력 한 변수보다 var이 리소스 집약적입니까?

var에 명시 적으로 입력 한 변수보다 리소스가 많은지 궁금합니다.

내 이해에 의하면 이것은 매우 동적 인 변수이며, var에 전달 된 다른 명시 적으로 유형화 된 변수와 마찬가지로 (동일한 기능을 수행/동일한 양의 리소스를 사용합니다).

자세한 내용을 알고있는 분은 정성 들여주세요.

미리 감사드립니다.

+0

아니요 개발자 용 설탕 구문입니다. –

+0

'var'은 동적이 아닙니다. 컴파일 유형에서 변수의 유형이 결정됩니다. 런타임에는 추가 리소스가 필요하지 않습니다. –

+0

대부분의 경우 var는 특정 유형으로 컴파일되므로 더 많은 리소스가 필요하지 않습니다. –

답변

2

Var은 형식을 명시 적으로 쓰는 구문 설탕입니다. 그것은 당신에게 타이핑을 줄여 주며 또한 할당 타입을 변경하면 변수 선언을 업데이트 할 필요가 없다는 것을 의미합니다.

예를 들어 다음과 같은 코드가있는 경우 :

 var s = "My String"; 

     String t = "My String"; 

을 그리고 그것을 ILSpyvar 분실로 s 원래 선언했다는 사실을 사용하여 컴파일. 컴파일러에서 IL을 생성 할 때 변수 s가 문자열이라는 사실을 알고 varString으로 바꿉니다.

+0

사실 "s"는 시작시 리소스에 비용이 들지 않는 문자열이기 때문에 프로그램 시작 시간이 길어 집니까? –

+1

아니요,'var'은 ** 동적이지 않은 ** 동적 타이핑입니다. 암시 적 ** 정적 ** 타이핑입니다. 하스켈, 하스켈, 스칼라, C++, 코 틀린, 실론, 녹, 스위프트, 자바 등 수많은 다른 언어와 마찬가지로 암시적인 정적 타이핑을 사용합니다. * 아무것도 런타임에 발생하지 않습니다. 통일과 역 추적에 대한 강력한 전체 프로그램 유형 추론을하는 언어에서 * 컴파일 * 시간이 느려질 수도 있지만 C#의 유형 유추는 너무 근본적이며 그 영향은 눈에 띄지 않습니다. 컴파일러는 어쨌든 할당이 합법적인지 여부를 확인하기 위해 RHS의 유형을 계산해야합니다. –

+0

@chimchillas 아니요. 시작 시간에 영향을주지 않습니다. 실제로 "s"변수는 실제로 문자열입니다. "var"라고 말한 것만 큼 컴파일러가 컴파일시에 알아낼 수 있습니다. 런타임 속도는 정확히 동일합니다. –

1

암시 적으로 형식화 된 로컬 변수의 강력한 입력은 컴파일 타임에 결정되므로 런타임시 응용 프로그램의 성능에 영향을주지 않습니다.

var 키워드는 전체 개체 이름을 변수 선언에 입력해야하는 개발자 작업을 단순화하고 그 밖의 것은 없습니다.

var 키워드는 "변형"을 의미하지 않으며 변수가 느슨하게 입력되었거나 늦게 바인딩되었음을 나타내지 않습니다. 컴파일러가 가장 적절한 유형을 결정하고 할당한다는 것입니다. - Implicitly Typed Local Variables (C# Programming Guide)

0
using System; 

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main() 
     { 
      var stringImplicit = "Blah"; 
      string stringExplicit = "Blah"; 

      Console.WriteLine("IMPLICIT : {0} - {1}", stringImplicit, stringImplicit.GetType().Name); 
      Console.WriteLine("EXPLICIT : {0} - {1}", stringExplicit, stringExplicit.GetType().Name); 

      Console.ReadKey(); 
     } 
    } 
} 

당신은 그들이에 관계없이 동일하게 볼 수 있습니다. 일리노이 (Intermediate Language - 컴파일 된 코드)를 살펴 본다면 똑같은 "바이트 코드"를 볼 수 있습니다. 당신이하고있는 일은 컴파일러가 그것을 해결해 줄 것을 요구하는 것뿐입니다. 편집 작업이 완료되면이 유형을 처리하는 '노력'이 더 이상 존재하지 않습니다.