gpt4 book ai didi

C# 结构和类变量值

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:12 25 4
gpt4 key购买 nike

我知道结构是值类型而类是引用类型但是当我执行下面的代码时为什么我得到两个不同的答案

谁能解释一下

[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);

输出

  1. 类:输出为2

  2. 它是 struct :output is 12

谁能解释一下?

谢谢

最佳答案

对于 structclass 行为非常不同的一行是

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com