Kar*_*gus 3 c# equality object
我觉得这很无知,但是有人能够向我解释为什么会这样吗?
class MyClass{ public int i {get; set; } }
class Program
{
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"); //Outputs 1
}
}
这对我来说是有意义的,因为我使用指针和所有那些伟大的东西,但我的印象是,使用C#,"b"将保持独立于"a".
我只是使用了一些非常糟糕的做法吗?也许有人可以指出我解释为什么在C#中这样的事情?
谢谢.
Joe*_*orn 10
这条线让你感到困惑:
a = b;
Run Code Online (Sandbox Code Playgroud)
您预计b要复制到a由值,但实际上所发生的一切是你已经分配从基准b到a.
.Net将世界划分为两类:引用类型和值类型(还有委托类型和其他几个,但这是另一个故事).您定义的任何类都是引用类型,并且有一些重要的事项要记住引用类型:
.Equals()用于值相等,并且您可能需要为您的类型重写.Equals()(和GetHashCode())以使其正确.