为什么拳击参考类型?

use*_*923 6 .net c# clr boxing

ECMA-335,1.8.2.4指定可盒装类型包括引用类型(不包括托管指针/ byrefs)和通用参数.

拳击参考类型的目的是什么?与未装箱的参考对象相比,盒装参考对象的功能和内存表示是否有任何不同?

Han*_*ant 5

装箱参考类型参考没有任何逻辑错误.这只是一个无操作,没有任何变化.

但是,对于.NET CLR中真正实现的内容,Ecma-335并不总是很好的描述.实现Opcodes.Box的JIT_Box()辅助函数在被要求装入不是值类型的值时实际上会抛出InvalidCastException.它期望编译器和抖动知道何时在不必要时抑制装箱转换.他们是这样.