C #에서 모든 변수 선언에 다목적 var 키워드를 사용하도록 권장합니까? 그렇다면 다음 명령문에서 10의 경우 M과 같이 변수 선언 내의 리터럴 값에 대한 특수 문자를 언급해야합니다.
var myDecimal = 14.5M;
차이가 나는 경우 C #을 사용하여 웹 개발을 시도하고 있습니다.
auto
.
C #에서 모든 변수 선언에 다목적 var 키워드를 사용하도록 권장합니까? 그렇다면 다음 명령문에서 10의 경우 M과 같이 변수 선언 내의 리터럴 값에 대한 특수 문자를 언급해야합니다.
var myDecimal = 14.5M;
차이가 나는 경우 C #을 사용하여 웹 개발을 시도하고 있습니다.
auto
.
답변:
var를 사용하는 것에 대해 많은 논쟁이있었습니다. 나의 일반적인 규칙은 다음과 같습니다.
기본적으로 목표는 코드를보다 쉽게 읽을 수 있도록하는 것입니다. 할당이 분명하기 때문에 var가 충분하다고 생각되면 var를 사용하십시오. 필요할 때 독자에게 힌트로 전체 유형 이름을 사용하십시오.
foreach
각 항목의 유형이 아니라 컬렉션 열거에만 관심이 있는 문장에서 'var'을 사용 합니다.
사용시기 var
는 프로그래밍 "거룩한 전쟁"입니다. 작업의 결과가 다음과 같은 익명 유형을 만들 때 필요한 위치는 정확히 한 곳입니다.
var result = new { Name = "John", Age = 35 };
다른 곳에서는 선택 사항이며 실제로 다른 상황에서 사용하거나 사용하지 않는 코딩 표준에 달려 있습니다.
그리고 네, 컴파일러에게 오른쪽에 무엇이 있는지 알려주려면 리터럴을위한 특수 문자가 필요합니다. 귀하의 예 에서을 제외한 M
기본값은 입니다.double
decimal
MSDN에서 :
그러나 var를 사용하면 코드를 다른 개발자가 이해하기 어렵게 만들 수 있습니다. 따라서 C # 설명서는 일반적으로 필요한 경우에만 var를 사용합니다.
나는 정말로 암시 적 타이핑을 좋아하지 않습니다. 표면적으로는 코드를 더 읽기 쉽게 만드는 경향이 있지만 많은 문제가 발생할 수 있습니다. 개발자가 다음과 같이 변수 이니셜 라이저를 변경하면
var myFloat=100f;
에
var myFloat=100;
또는
var myFloat=100.0;
유형이 변경되어 전체 컴파일러 오류가 발생하거나 웹보기에 있고 빌드 후 단계를 사용하여 뷰를 사전 컴파일하지 않으면 효과적이지 않으면 잡히지 않는 전체 런타임 오류가 발생합니다 배포 전 테스트.
암시 적 타이핑은 모든 곳에서 작동하지 않습니다 (같은 MSDN 링크에서)
var는 로컬 변수가 동일한 명령문에서 선언되고 초기화 될 때만 사용할 수 있습니다. 변수는 널 또는 메소드 그룹 또는 익명 함수로 초기화 될 수 없습니다.
클래스 범위의 필드에는 var를 사용할 수 없습니다.
var를 사용하여 선언 된 변수는 초기화 표현식에서 사용할 수 없습니다. 다시 말해,이 표현은 합법적입니다 : int i = (i = 20); 그러나이 표현식은 컴파일 타임 오류를 생성합니다. var i = (i = 20);
여러 개의 내재적 유형 변수는 동일한 명령문에서 초기화 될 수 없습니다.
var라는 유형이 범위 내에 있으면 var 키워드는 해당 유형 이름으로 확인되며 암시 적으로 유형이 지정된 로컬 변수 선언의 일부로 처리되지 않습니다.
코드 일관성을 유지하는 경우 (이 경우 명시적인 타이핑을 사용하는 것) 매우 좋습니다. 제 생각 var
에는 게으르고 실질적인 이점이 없으며 이미 복잡한 프로세스에서 또 다른 잠재적 실패 지점을 소개합니다.
2017 년 업데이트
나는 마음을 완전히 바꿨습니다. C #에서 작업 할 때 var
대부분의 시간을 사용합니다 (인터페이스 유형 변수 등은 제외). 가독성을 향상시키는 코드를 간결하게 유지합니다. 그래도 해결 된 유형이 실제로 무엇인지주의하십시오.
this.
어디에서나 사용하지 않거나 , System.Blah.SomeType
대신 말을 하는 것처럼, using
나는 여전히 짜증나게하지만, 더 간결한 코드는 일반적으로 시각적으로 파싱하기가 더 쉽습니다. 명시 적 타이핑이 올바른 선택 인 시나리오는 여전히 많습니다. 그러나 요즘 나는 누군가가 깨끗한 코드를 문 밖으로 가져 오는 것보다 언어 변호사가 아닙니다.
using namespace std;
.cpp 파일 을 사용하는 사람입니다 . (타르 링과 페더 링을 피하고
C # 참조는이 구문의 좋은 사용과 나쁜 사용을 설명하기 위해 다음을 보여줍니다.
다음 예제는 두 개의 쿼리 표현식을 보여줍니다. 첫 번째 표현식에서는 var의 사용이 허용되지만 쿼리 결과의 유형을 명시 적으로 IEnumerable로 명시 할 수 있으므로 필수는 아닙니다. 그러나 두 번째 표현식에서는 결과가 익명 유형의 콜렉션이므로 해당 유형의 이름은 컴파일러 자체를 제외하고 액세스 할 수 없으므로 var를 사용해야합니다. 예제 # 2에서 foreach 반복 변수 항목도 암시 적으로 입력해야합니다.
// Example #1: var is optional because
// the select clause specifies a string
string[] words = { "apple", "strawberry", "grape", "peach", "banana" };
var wordQuery = from word in words
where word[0] == 'g'
select word;
// Because each element in the sequence is a string,
// not an anonymous type, var is optional here also.
foreach (string s in wordQuery)
{
Console.WriteLine(s);
}
// Example #2: var is required because
// the select clause specifies an anonymous type
var custQuery = from cust in customers
where cust.City == "Phoenix"
select new { cust.Name, cust.Phone };
// var must be used because each item
// in the sequence is an anonymous type
foreach (var item in custQuery)
{
Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}
나를 위해 다음과 같은 경우 var를 사용하지 않습니다.
Fruit foo = new Apple();
. 이 경우 var는 코드 논리를 이해하고 가능한 버그의 제한을 더 잘 이해함으로써 부모 클래스 (여기서는 Fruit)를 사용하는 것이 좋습니다. var는 다형성 개념을 확인하지 않습니다!나머지는 개발자의 경우와 배경에 달려 있다고 생각합니다. PHP 세계의 일부 사람들은 변수 유형을 돌보지 않고 Java 세계의 일부 사람들은 var가 이단이라고 생각하고 더 장황할수록 더 좋습니다.
당신은 당신의 개인적인 의견을 만들어야합니다 :)