Không, nó không được đặt trong một đối tượng không được nhập. Đối với mỗi loại giá trị, có một loại tham chiếu đóng hộp trong CLR. Vì vậy, bạn muốn có một cái gì đó như:
public class BoxedInt32 // Not the actual name
{
private readonly int value;
public BoxedInt32(int value)
{
this.value = value;
}
}
Đó là loại đóng hộp là không trực tiếp truy cập trong C#, mặc dù nó là trong C++/CLI. Rõ ràng là biết loại ban đầu. Vì vậy, trong C# bạn phải có một loại biên dịch thời gian là object
cho biến nhưng điều đó không có nghĩa đó là loại thực tế của đối tượng.
Xem ECMA CLI spec hoặc CLR via C# để biết thêm chi tiết.
Nguồn
2010-04-16 09:09:02
intersting, nhờ Jon. Trạng thái C# hiệu quả của Wagner: "Boxing đặt một loại giá trị trong một đối tượng tham chiếu chưa được phân loại". Tôi khá chắc chắn nó cũng nói một cái gì đó để có hiệu lực mà các đối tượng đóng hộp không chứa bất kỳ siêu dữ liệu loại, mặc dù tôi không thể tìm thấy báo giá cụ thể ngay bây giờ. Đó là khi đọc cuốn sách mà câu hỏi đã xảy ra với tôi. – fearofawhackplanet
@fearofawhackplanet: Tôi không muốn nói những lời vào miệng của Bill về chính xác những gì anh ta nói - nhưng đối tượng hộp chắc chắn nhất * không * biết loại ban đầu của nó, bao gồm cả enums. (Hộp một giá trị enum và sau đó sử dụng ToString trực tiếp không có unboxing cho bằng chứng đó :) –
Tôi tin rằng một cuộc biểu tình tốt là điều này. 'long l = 40L; đối tượng o = (đối tượng) l; Console.WriteLine (o.GetType()); 'Trong trường hợp này, System.Int64 được in ra màn hình. Mặc dù 'o' là một đối tượng, kiểu cơ bản vẫn dài. –