2009-07-30 32 views

Trả lời

12

Về cơ bản, nó là một cheat ;-p

Bất kỳ struct (ví dụ: bất cứ điều gì được thừa kế từ ValueType) được xử lý bằng giá trị kiểu ngữ nghĩa. Nhưng có chuyển đổi quyền anh là thành object khi cần thiết; có nghĩa là nếu bạn bỏ một struct đến một số object, nó sẽ tạo một đối tượng đặc biệt (trên vùng được quản lý) chứa dữ liệu (như một bản sao) từ giá trị của bạn *.

Phiên bản đóng hộp là kiểu tham chiếu. Bạn có thể unbox này (bằng cách đúc) trở lại phiên bản struct, mà đảo ngược này (sao chép dữ liệu nhân bản từ đối tượng trên đống vào giá trị địa phương của bạn).


* = trừ khi nó là một sản phẩm nào Nullable<T>, mà hộp để null; tương tự, null hộp thư đến số trống Nullable<T>.

+0

Bạn có thể giải thích cho tôi hoặc chỉ ra một liên kết về cách ma thuật (gian lận) đang xảy ra không? tức là Struct là loại giá trị trong khi loại đối tượng tham chiếu – skjagini

+0

@skjagini - đơn giản, trình biên dịch và thời gian chạy có thể dễ dàng nhận ra rằng một cái gì đó bắt nguồn từ 'ValueType' và xử lý nó khác ... Ngoài ra? ECMA335 –

+0

+1 Mặc dù các ngôn ngữ như C# giả sử rằng cấu trúc đóng hộp là kiểu giá trị, trong phạm vi ruột của CLR, mỗi loại giá trị được quản lý có loại lớp tương ứng đóng gói một trường của loại giá trị tương ứng và kết thúc tất cả thành viên lĩnh vực đó. Ngay cả khi đặc tả ngôn ngữ C# gọi một loại giá trị như vậy, nó sẽ hoạt động như một kiểu tham chiếu. – supercat

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