问这个我觉得很无知,但是有人能向我解释为什么会这样吗?
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/