通过引用传递结构时的C#框或副本?

时间:2016-11-23 22:03:41

标签: 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??
}

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

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; }

1 个答案:

答案 0 :(得分:4)

如果您阅读ref

的文档,那么Struct是值类型
  

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

ref (C# Reference)

这里解释一下ref正在做什么。

  

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