在.net中通过引用传递值类型

时间:2013-06-19 20:38:05

标签: .net

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

1 个答案:

答案 0 :(得分:1)

没有。有一些特殊的CIL instructions,例如ldind系列(用于整数类型的局部变量)和ldflda(用于对象字段),用于推送某些内容的地址堆栈。

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