code

C #에서 "var"는 무엇을 의미합니까?

codestyles 2020. 9. 7. 08:08
반응형

C #에서 "var"는 무엇을 의미합니까?


중복 가능성 :
C #에서 var 키워드 사용

C #에서 키워드는 어떻게 var작동합니까?


이는 선언되는 로컬 유형이 컴파일러에 의해 유추된다는 것을 의미합니다.

// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";

특히 var변수를 동적 유형으로 정의하지 않습니다. 따라서 이것은 합법적이지 않습니다.

var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints

var 두 가지 용도로만 사용됩니다.

  1. 특히 변수를 중첩 된 제네릭 유형으로 선언 할 때 변수를 선언하는 데 더 적은 입력이 필요합니다.
  2. 형식 이름을 미리 알 수 없기 때문에 익명 형식의 개체에 대한 참조를 저장할 때 사용해야합니다. var foo = new { Bar = "bar" };

var지역 주민 이외의 유형으로 사용할 수 없습니다 . 따라서 키워드 var사용하여 필드 / 속성 / 매개 변수 / 반환 유형을 선언 할 수 없습니다 .


이는 데이터 유형이 컨텍스트에서 파생 (묵시적)됨을 의미합니다.

에서 http://msdn.microsoft.com/en-us/library/bb383973.aspx

Visual C # 3.0부터 메서드 범위에서 선언 된 변수는 암시 적 형식 var를 가질 수 있습니다. 암시 적으로 형식이 지정된 지역 변수는 형식을 직접 선언 한 것처럼 강력하게 형식 지정되지만 컴파일러가 형식을 결정합니다. i의 다음 두 선언은 기능적으로 동일합니다.

var i = 10; // implicitly typed
int i = 10; //explicitly typed

var 키보드 입력 및 시각적 소음을 제거하는 데 유용합니다.

MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();

된다

var x = new MyReallyReallyLongClassName();

그러나 가독성이 희생되는 지점까지 남용 될 수 있습니다.


"var"는 컴파일러가 사용량에 따라 변수의 명시 적 유형을 결정 함을 의미합니다. 예를 들면

var myVar = new Connection();

연결 유형의 변수를 제공합니다.


초기화에서 할당 된 내용을 기반으로 유형을 선언합니다.

간단한 예는 다음과 같습니다.

var i = 53;

53의 유형을 검사하고 기본적으로 다음과 같이 다시 작성합니다.

int i = 53;

Note that while we can have:

long i = 53;

This won't happen with var. Though it can with:

var i = 53l; // i is now a long

Similarly:

var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.

This can be a minor convenience with complicated types. It is more important with anonymous types:

var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
  Console.WriteLine(j.ID.ToString() + ":" + j.Name);

Here there is no other way of defining i and j than using var as there is no name for the types that they hold.


Did you ever hated to write such variable initializers?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

So, starting with C# 3.0, you can replace it with

var xmlSerializer = new XmlSerialzer(typeof(int))

One notice: Type is resolved during compilation, so no problems with performance. But Compiler should be able to detect type during build step, so code like var xmlSerializer; won't compile at all.

참고URL : https://stackoverflow.com/questions/4307467/what-does-var-mean-in-c

반응형