2

我很想知道当我在 .NET 中使用“ref”或“out”运算符通过引用传递值类型时,幕后会发生什么。我知道按值传递具有“复制”语义。那么,当我通过引用将值类型传递给函数时,变量是否被装箱为引用类型,存储在堆上,然后传递对它的引用呢?

4

1 回答 1

1

没有。有一些特殊的CIL 指令,例如ldind族(用于整数类型的局部变量)和ldflda(用于对象字段)将某些东西的地址压入堆栈。

接收方法使用其他适当的指令来取消引用该地址并读取或写入其值。简而言之,ref参数out实际上只是指针。

于 2013-06-19T20:46:41.797 回答