问这个我觉得很无知,但是有人能向我解释为什么会这样吗?

class MyClass{ public int i {get;放; } }
类(class)计划
{
static void Main(string[] args)
{
MyClass a = new MyClass();
MyClass b = new MyClass();

b.i = 2;
a = b;
a.i = 1;

Console.Write(b.i + "\n");//输出1
}
}

如果我使用指针和所有这些很棒的东西,这对我来说很有意义,但我的印象是,使用 C#,“b”将保持独立于“a”。

我只是使用了一些非常糟糕的做法吗?也许有人可以给我指出一些解释为什么在 C# 中如此的东西?

谢谢。

最佳答案

正是这一行让你感到困惑:

a = b;

您希望 b 按值复制到 a ,但实际上发生的一切都是您已将 b 的引用分配给 a

.Net 将世界分为两类:引用类型和值类型(还有委托(delegate)类型和其他一些类型,但那是另一回事了)。你定义的任何类都是引用类型,关于引用类型有一些重要的事情要记住:
  • 没有内置的方法来进行深度复制
  • 仔细检查相等性。 == 用于引用相等(变量是否引用同一个对象),而 .Equals() 用于值相等,您可能需要覆盖 .Equals()(和 GetHashCode())以使您的类型正确。
  • 赋值只是复制引用 (这是咬你的部分)
  • 关于c# - .NET 中的对象相等性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2113620/

    10-13 06:39