gpt4 book ai didi

c# - .NET 中的对象相等性

转载 作者:行者123 更新时间:2023-11-30 13:13:57 24 4
gpt4 key购买 nike

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

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# 中如此的东西?

谢谢。

最佳答案

是这一行让你感到困惑:

a = b;

您希望 b 按值复制到 a,但实际上您已经分配了来自 b 的引用到 a

.Net 将世界分为两类:引用类型和值类型(还有委托(delegate)类型和其他一些类型,但那是另一回事了)。您定义的任何类都是引用类型,关于引用类型,需要记住一些重要的事情:

  • 没有内置的方法来进行深拷贝
  • 小心检查是否相等。 == 用于引用相等(变量是否引用相同 对象)而 .Equals() 用于值相等,您可能需要覆盖 .Equals ()(和 GetHashCode())为您的类型做对。
  • 作业只是复制引用(这是让你感到厌烦的部分)

关于c# - .NET 中的对象相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2113620/

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