我知道结构是值类型而类是引用类型但是当我执行下面的代码时为什么我得到两个不同的答案
谁能解释一下
[struct|class] values {
public int x, y;
public values (int x, int y) {
this.x = x;
this.y = y;
}
}
values v = new values(12, 13);
object o = v;
v.x = 2;
Console.WriteLine(((values)o).x);
输出
当
类:输出为2
它是 struct :output is 12
谁能解释一下?
谢谢
最佳答案
对于 struct
或 class
行为非常不同的一行是
object o = v;
当
Values
是引用类型时,o
成为引用v
的副本。Values
仍然只有 1 个实例。当
Values
是值类型时,o
成为对实例本身的盒装副本的引用。在这种情况下,赋值创建了第二个实例,您在原始实例上执行v.x = 2
。副本不受影响。
您的示例包括装箱,这是不必要的复杂化,当您使用 values o = v;
时,您将获得相同的输出。然后该行创建一个没有装箱的普通副本(第二个实例)。
总结一下:值和引用类型之间的主要区别在于复制语义。您会注意到简单赋值 (x = y
) 和参数传递 (foo(x)
) 中的不同行为。
您可能会遇到可变值类型的问题。作为练习,看看 f.Myvalue.x = 2;
对 Values
做了什么作为类或结构与
class Foo { public Values MyValue { get; set; } }
关于C# 结构和类变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231567/