拳击和拆箱是一个神话?

TOP*_*KEK -2 c# clr boxing unboxing

在C#Int类型中派生自ValueType.ValueType是从Object类型派生的.因此Int是一个Object.

如果每个值类型变量已经是一个Object,那么在装箱/拆箱期间实际发生了什么?

Ben*_*igt 9

Object实例有一个特定的内存布局.为了节省空间并与本机代码(COM,p/invoke等)兼容,值类型的实例不符合该布局.

"boxing"将值嵌入到具有预期布局的实际"对象"实例中.这使得能够通过在object实例上工作的所有各种函数进行多态使用并期望该接口.

说这Int32是一个子类是非常不正确的Object."boxed Int32"是,但"unboxed Int32"实例根本没有任何基类子对象.(除此之外,object布局包括指向实例的实际派生类型的指针.值类型对象的类型由它们与其他东西的关系决定,它们不包含类型元数据.或者监视器.或者全部其他的好东西object.盒装版本.)