我很想知道当我使用.NET中的“ref”或“out”运算符通过引用传递值类型时幕后发生的事情。我知道通过值传递具有“复制”语义。因此,当我通过引用将值类型传递给函数时,变量是否被装箱到存储在堆上的引用类型,然后传递对它的引用?
答案 0 :(得分:1)
没有。有一些特殊的CIL instructions,例如ldind
系列(用于整数类型的局部变量)和ldflda
(用于对象字段),用于推送某些内容的地址堆栈。
接收方法使用其他适当的指令来取消引用该地址并读取或写入其值。简而言之,ref
和out
参数实际上只是指针。