2011-01-28 3 views
0

1) A a;
2) A a = null;다음 두

의 차이는 어떤 차이가 있습니까?

+0

http://stackoverflow.com/questions/589920/default-value-of-a-variable-at-the-time-of-declaration-in-c-and-vb – alexandrul

답변

5

로컬 변수의 경우 절대적으로 - 첫 번째는 명확하게 할당되지 않고 두 번째는 할당됩니다. 예를 들어 A가 참조 형식 인 경우 필드의

void DoesntCompile() 
{ 
    A a; 
    string x = a.ToString(); // Can't use a - it's not definitely assigned 
} 

void CompilesButGoesBang() 
{ 
    A a = null; 
    string x = a.ToString(); // Throws a NullReferenceException 
} 

(static 또는 인스턴스), 아마 차이를 만들지 않는다. 나는 수있는 프로그램을 작성하는 경우에는 정적 변수의 차이를 보여 주지만, 정적 유형 이니셜 라이저를 사용하여 두 번 반사 ... 역겨운 것입니다.

당신이 묻는 이유에 대해 더 많은 맥락을 줄 수 있다면, 정말 도움이 될 것입니다.

+0

왜 C# 참조 유형을 선언 할 때 기본 null이 없습니다. 값 유형을 선언하면 기본 값을 가져야한다고 생각합니다. 맞습니까? – user496949

+0

@ user496949 : 아니오, 지역 변수가 아닙니다. mutable 구조체로 할 수있는 이상한 일들이 있습니다. 먼저 "empty"변수에 필드를 할당하지만,'int'와 같은 것을 사용하면 문자열 변수와 마찬가지로 지역 변수와 똑같은 동작을 볼 수 있습니다. –

+0

@ user496949를 * 변수로 사용하는 경우 : no : 값 유형에도 초기 값이 없습니다. (할당되지 않은 구조체의 모든 필드를 * 할당하는 경우가 있지만 어쨌든 지저분하고 가변성을 요구합니다.). 더 간단한 대답은 "변수는 초기 값이 없습니다. 필드는 유형의 기본값을 가져옵니다" –

2

C#에서 변수는 here에 나열된 규칙에 따라 기본값입니다.

두 가지 주요 차이점은 사례 2의 경우 변수가 "명확하게 할당 된"것으로 간주 될 수 있다는 것입니다. 변수의 사용 방법에 따라 컴파일러에서 특정 작업을 허용하기 전에 변수를 할당해야합니다. 명확한 과제는 this note을 참조하십시오.

+0

각 유형에 기본값이 있으므로 컴파일러가 할당되지 않은 로컬 변수를 사용하지 못하게하는 이유는 다음과 같습니다. – user496949

+0

참고 자료는 * right *이지만 VS 2003 문서에서 전환 할 때가 있습니다. –

+0

@ user496949 두 답변이 이미 귀하에게 말했습니다. "명확한 할당"- 이것은 스펙에서 (변수에 대해) 요구됩니다. –

관련 문제