No. Kiểm tra đầu ra IL (được tạo trong LINQPad). Nó không thực sự gọi một nhà xây dựng ở tất cả. Thay vào đó, nó lưu trữ giá trị số nguyên 0 bên trong một biến cục bộ được gọi là f
. Đây là chính xác cùng một đầu ra khi bạn nhận được khi bạn sử dụng một loại đúc để enum.
Theo như trình biên dịch liên quan, Fruits f = new Fruits();
giống với Fruit f = (Fruit)0;
.
Fruits f = new Fruits()
IL
Program.Main:
IL_0000: nop
IL_0001: ldc.i4.0
IL_0002: stloc.0 // f
IL_0003: ret
Program..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret
Để so sánh, đây là đầu ra IL của một lớp bình thường. Nhìn vào IL_001 trong Program.Main nơi nó thực sự gọi một hàm tạo cho lớp đó.
Program.Main:
IL_0000: nop
IL_0001: newobj UserQuery+Program+Fruits..ctor
IL_0006: stloc.0 // f
IL_0007: ret
Program..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret
Fruits..ctor:
IL_0000: ldarg.0
IL_0001: call System.Object..ctor
IL_0006: ret
Nguồn
2015-08-05 14:14:27
bạn muốn đạt được điều gì với nhà xây dựng như vậy? –
Tôi có thể muốn ghi đè hành vi mặc định của việc trả lại Apple theo mặc định, chỉ cần suy nghĩ to. – yogi
Bạn có thể thay đổi mặc định bằng cách thay đổi thứ tự các thay thế enum được liệt kê. –