2010-05-25 46 views

Trả lời

7

Tôi tin rằng mặc định là 0, vì vậy bạn sẽ có một HardwareInterfaceType không hợp lệ được tạo. Cá nhân tôi không thích loại mã hóa này cho enums. IMO nó rõ ràng hơn để xác định một giá trị Enum của "Không xác định" hoặc "Không" và sau đó khởi tạo biến đó để thay thế.

Một trong những "Gotchas" với enums là chúng có thể được khởi tạo thành một giá trị không tồn tại trong enum. Lập trình ban đầu có thể nghĩ rằng enum sẽ được khởi tạo cho một số giá trị hợp lệ trong định nghĩa Enum nếu anh ta sử dụng từ khóa "mặc định". Không đúng, và IMO đây không phải là một sử dụng tốt của từ khóa "mặc định" ở tất cả.

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

+1 cho giá trị "Không xác định" – Christian

4

từ khóa mặc định được sử dụng chủ yếu khi viết mã chung.

Trong các lớp và phương thức chung, một vấn đề phát sinh là cách gán giá trị mặc định cho loại T được tham số khi bạn không biết T có phải là loại tham chiếu hay loại giá trị không và T là loại giá trị, cho dù đó sẽ là một giá trị số hoặc một cấu trúc.

Trong trường hợp của bạn nó gán 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

trong trường hợp của tôi là gì? –

+1

Trong trường hợp của bạn, nó gán 0. –

5

default sẽ cung cấp các giá trị mặc định cho một loại ngôn ngữ - trong trường hợp giá trị số, và bằng cách mở rộng, kiểu liệt kê, zero. đối với các loại tham chiếu, mặc định sẽ là null.

Nó thường được sử dụng với generics, nơi loại không được biết lên phía trước.

2

Tôi nghĩ mặc định từ khóa được sử dụng khi bạn không cần phải tạo ra ví dụ mới của bất kỳ đối tượng lớp nói:

một cách là như

HardwareInterfaceType type = new HardwareInterfaceType(); 

và thứ hai theo cách này giống như thế này cũng là

HardwareInterfaceType type = default(HardwareInterfaceType); 

Đoạn mã trên sẽ tạo đối tượng phần cứng nhưng nó sẽ không tạo e bất kỳ bộ nhớ mới nào.

Các vấn đề liên quan