2010-05-25 3 views

답변

7

기본값은 0으로 생각됩니다. 따라서 잘못된 HardwareInterfaceType이 생성됩니다. 나는 개인적으로 열거 형을 코딩하는 이런 종류의 것을 좋아하지 않는다. IMO는 Enum 값을 "Undefined"또는 "None"으로 정의한 다음 대신 변수를 초기화합니다.

열거 형이있는 "Gotchas"중 하나는 열거 형에 존재하지 않는 값으로 초기화 될 수 있다는 것입니다. 원래 프로그래머는 "default"키워드를 사용하면 Enum 정의에서 유효한 값으로 초기화 될 것이라고 생각했을 수 있습니다. 사실이 아니며 IMO는 "기본"키워드를 전혀 사용하지 않습니다.

var foobar = default(HardwareInterfaceType); 
Console.WriteLine(Enum.IsDefined(typeof(HardwareInterfaceType), foobar)); //returns false 
Console.WriteLine(foobar); //returns 0 
+0

+1 "정의되지 않음"값 – Christian

4

기본 키워드는 주로 일반 코드를 작성하는 동안 사용됩니다.

제네릭 클래스 및 메서드에서 발생하는 한 가지 문제는 T가 참조 형식인지 값 형식인지 알 수 없을 때 매개 변수가있는 형식 T에 기본값을 할당하는 방법과 T가 값 형식 인 경우, 그것이 숫자 값이든 구조체이든간에. 숫자 값의 경우, 및 확장, 열거 0으로 - 귀하의 경우에는

은 0

static void Main(string[] args) 
    { 

     HardwareInterfaceType type = default(HardwareInterfaceType); 
     Console.WriteLine(type.ToString()); 

     type = HardwareInterfaceType.Gpib; 
     Console.WriteLine(type.ToString()); 

     Console.ReadLine(); 
    } 

    public enum HardwareInterfaceType 
    { 
     Gpib = 1, 
     Vxi = 2, 
     GpibVxi = 3, 
    } 

    //output 
    0 
    Gpib 
+0

제 경우에는 무엇이 할당되어 있습니까? –

+1

귀하의 경우 0을 할당합니다. –

5

default는 언어 유형에 대한 기본 값을 제공합니다 할당합니다. 참조 유형의 경우 기본값은 null입니다.

유형이 앞쪽에 알려지지 않은 제네릭에서 더 일반적으로 사용됩니다.

2

난 당신이 모든 클래스 개체의 새 인스턴스를 만들 필요가 없습니다 때 기본 키워드를 사용하는 생각 말 :

하나의 방법이

HardwareInterfaceType type = new HardwareInterfaceType(); 

와 두 번째 방법처럼 이 같은 경우도

HardwareInterfaceType type = default(HardwareInterfaceType); 

위 코드는 hardwareinterfacetype의 개체를 생성하지만 생성되지 않습니다. 어떤 새로운 메모리.