通过引用传递结构时,C#框还是复制?

joh*_*ash 0 c# struct boxing

C#是否在此处框出结构?

struct S { int x; }

void foo(ref S s) { s.x = 1; }

main { 
  var s = new S();
  foo(ref s); <-- boxing??
}
Run Code Online (Sandbox Code Playgroud)

我听说过关于类中的结构的怪异内容。这里有拳击吗?这是通过成员的副本吗?

class C { S s; }

main { 
  var c = new C();
  foo(ref c.s); <-- boxing here?? copy here???
}
void foo(ref S s) { s.x = 1; }
Run Code Online (Sandbox Code Playgroud)

myb*_*ame 5

Struct如果您阅读ref的文档,那么值类型也是如此

不要将通过引用传递的概念与引用类型的概念混淆。这两个概念并不相同。可以通过ref修改方法参数,而不管它是值类型还是引用类型。通过引用传递值类型时,没有装箱。

ref(C#参考)

在这里说明ref到底在做什么。

ref关键字使参数按引用而不是按值传递。通过引用传递的效果是,被调用方法中参数的任何更改都会反映在调用方法中。