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
두 가지 용도로만 사용됩니다.
- 특히 변수를 중첩 된 제네릭 유형으로 선언 할 때 변수를 선언하는 데 더 적은 입력이 필요합니다.
- 형식 이름을 미리 알 수 없기 때문에 익명 형식의 개체에 대한 참조를 저장할 때 사용해야합니다.
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;
다음을 가질 수 있습니다.
long i = 53;
이것은 var에서는 발생하지 않습니다. 다음과 같이 할 수 있지만 :
var i = 53l; // i is now a long
비슷하게:
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.
이것은 복잡한 유형의 경우 사소한 편의가 될 수 있습니다. 익명 유형에서는 더 중요합니다.
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);
여기에는 보유한 유형에 대한 이름이 없기 때문에 정의 i
하고 j
사용 하는 다른 방법 var
이 없습니다.
답변
그런 변수 이니셜 라이저를 작성하는 것을 싫어 한 적이 있습니까?
XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))
따라서 C # 3.0부터는 다음과 같이 바꿀 수 있습니다.
var xmlSerializer = new XmlSerialzer(typeof(int))
한 가지 알림 : 유형은 컴파일 중에 해결되므로 성능에 문제가 없습니다. 그러나 컴파일러는 빌드 단계에서 유형을 감지 할 수 있어야하므로 같은 코드 var xmlSerializer;
는 전혀 컴파일되지 않습니다.
답변
- 이름에서 알 수 있듯이 var는 데이터 유형이없는 변수입니다.
- 메서드에서 어떤 유형의 데이터를 반환할지 모르는 경우 이러한 경우는 var를 사용하는 것이 좋습니다.
- var는 시스템이 데이터 유형 자체를 정의 함을 의미하는 암시 적 유형입니다. 컴파일러는 “=”연산자의 오른쪽에있는 값을 기반으로 유형을 유추합니다.
- int / string 등은 명시 적으로 정의한 명시 적 유형입니다.
- Var은 메서드에서 지역 변수로만 정의 할 수 있습니다.
- 단일 문에서 여러 변수를 선언하고 초기화 할 수 없습니다. 예 : var i = 1, j = 2; 유효하지 않다.
int i = 100;// explicitly typed
var j = 100; // implicitly typed
답변
var는 C #에서 “컨텍스트 키워드”로, 변수를 사용하는 동일한 클래스의 컨텍스트에서 암시 적으로 로컬 변수로만 사용할 수 있음을 의미합니다. “Main”이나 다른 외부 클래스 또는 인터페이스에서 호출하는 클래스에서 사용하려고하면 CS0825 오류가 발생합니다. < https://docs.microsoft.com/en-us/dotnet/ csharp / 기타 / cs0825 >
다음 문서에서 사용할 수있는 경우와 사용할 수없는 경우에 대한 설명을 참조하십시오. < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed -local-variables # 비고 >
기본적으로 “var myValue =”This is the value “와 같은 암시 적 값을 가진 변수를 선언 할 때만이 옵션을 사용해야합니다. 예를 들어”문자열 “을 말하는 것에 비해 약간의 시간을 절약 할 수 있지만 IMHO는 시간이 많지 않습니다. 저장하고 프로젝트의 확장성에 제약을 둡니다.