C #의 기본 부울 값은 무엇입니까?


82

부울 ( bool)은 null 일 수 없습니다. 과:

bool foo; if(foo){} // Use of unassigned local variable 'foo'

기본값이 거짓이 아닌 이유는 무엇입니까? 그렇다면 null이 아닌 경우 값은 무엇입니까? 그 이유는 무엇입니까?

편집 1-기본값은 실제로 거짓이지만 모든 변수를 초기화해야합니다. 이유는 무엇입니까? 이것은 다른 질문입니다;)

편집 2-Resharper 사용 : private bool foo = false; // Initializing field by default value is redundant???


1
당신은 찾을 수 blogs.msdn.com/b/ericlippert/archive/2009/10/12/... 흥미로운
AakashM

답변:


101

http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

C #에서 초기화되지 않은 변수를 사용하는 것은 허용되지 않습니다.

bool foo = new bool();

foo는 기본값을 갖습니다.

부울 기본값은 false입니다.


1
죄송합니다. C #에서 초기화되지 않은 변수를 사용하는 것은 허용되지 않습니다. 링크 된 기사에서 볼 수 있듯이
소멸자

1
감사! 그래서 당신은 내 "편집 2": 설명 할 수있는 방법
JohnJohnGa

1
기본 생성자가 호출되면 기본값이 설정됩니다. 값으로 새 변수를 초기화했습니다. "int i"는 동일한 오류-할당되지 않은 지역 변수 사용-을 발생시킵니다. 초기화 할 때 값을 설정하거나 기본 생성자를 호출합니다. 당신은 어떤 문제 :)하지 않도록
소멸자

1
@Destructor 귀하의 의견이 약간 혼란 스럽습니다. resharper가 OP가 부울 필드를 초기화 할 필요가 없다고 제안하는 이유는 클래스의 필드가 로컬 변수가 아닌 기본값이 자동으로 할당되기 때문입니다. 아래 Hasan답변을 참조하십시오 .
Alex

25

기본적으로 지역 변수는 자동으로 초기화되지 않습니다. 따라서 초기화하지 않고 사용하면 예외가 발생합니다.

다음 변수 만 기본값으로 자동 초기화됩니다.

  • 정적 변수
  • 클래스 및 구조체 인스턴스의 인스턴스 변수
  • 배열 요소

기본값은 다음과 같습니다 (클래스의 기본 생성자에 지정됨).

  • 참조 유형 변수의 기본값은 널입니다.
  • 정수 유형의 경우 기본값은 0입니다.
  • char의 경우 기본값은`\ u0000 '입니다.
  • float의 경우 기본값은 0.0f입니다.
  • double의 경우 기본값은 0.0d입니다.
  • 10 진수의 경우 기본값은 0.0m입니다.
  • bool의 경우 기본값은 false입니다.
  • 열거 형 유형의 경우 기본값은 0입니다.
  • 구조체 유형의 경우 모든 값 유형 필드를 기본값으로 설정하여 기본값을 얻습니다.

귀하의 질문의 후반부에 관한 한 :

  • 기본값으로 자동 초기화되지 않는 모든 변수를 초기화해야하는 이유는 컴파일러가 부과 한 제한 때문입니다.
  • private bool foo = false; 이것은 클래스의 인스턴스 변수이기 때문에 실제로 중복됩니다. 따라서 이것은 기본 생성자에서 false로 초기화됩니다. 따라서 이것을 거짓으로 설정할 필요가 없습니다.

4
완전성을 위해 MSDN기본값 테이블 에는 구조체 유형의 기본값에 "모든 참조 유형 필드를 null로"설정하는 것도 포함되어 있다고합니다.
Carl Walsh

10

기본값은 실제로 거짓입니다.

그러나 먼저 할당되지 않았기 때문에 지역 변수를 사용할 수 없습니다.

기본 키워드를 사용하여 다음을 확인할 수 있습니다.

bool foo = default(bool);
if (!foo) { Console.WriteLine("Default is false"); }

4

bool의 기본값은 false입니다. 기본값에 대한 훌륭한 참조는 이 표 를 참조하십시오 . 확인할 때 거짓이 아닌 유일한 이유는 초기화 / 참으로 설정 한 경우입니다.


0

이것을 시도하십시오 (기본 키워드 사용)

 bool foo = default(bool); if (foo) { } 

0

컴파일러에서 방어 프로그래밍 방식으로 처리 할 수 ​​있습니다. 변수를 사용하려면 먼저 할당해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.