在这篇 MSDN 杂志文章中,作者指出(强调我的):
请注意,装箱始终会创建一个新对象并将未装箱值的位复制到该对象。另一方面,拆箱只是返回一个指向装箱对象中数据的指针:不会发生内存复制。但是,通常情况下,您的代码将导致未装箱引用指向的数据无论如何都被复制。
我对我加粗的句子及其后面的句子感到困惑。从我读过的所有其他内容中,包括这个 MSDN page,我以前从未听说过拆箱只会返回一个指向堆上值的指针。我的印象是拆箱会导致您拥有一个包含堆栈上值副本的变量,就像您开始时一样。毕竟,如果我的变量包含“指向堆上值的指针”,那么我没有值类型,我有一个指针。
有人可以解释这是什么意思吗?作者是在破解吗?(文章中至少还有一个明显的错误)。如果这是真的,“您的代码将导致未装箱引用指向的数据无论如何都被复制”的情况是什么?
我刚刚注意到这篇文章已经有将近 10 年的历史了,所以这可能是 .Net 生命早期发生的变化。