我有两个对象说 Object1,Object2 。
这两个对象具有相同的属性。
我的代码如下所示
(2*n + 1)^2 = 8*k + 1
当我尝试检索Object1.property1时,它显示 y 。
这里我不想更改Object1.property1,但是当Object2.property1发生变化时它会被修改。
我的问题是
为什么我的代码表现得那样或者有没有我在c#中不知道的概念?
答案 0 :(得分:2)
它表现得像那样,因为你实际上没有2个物体。你只有一个。
Object1
和Object2
只是变量。它们本身不是对象。他们存储了一个"参考"指向对象。您可以使用变量来访问该对象。在您的代码中的某些时候,您很可能已经编写了
Object1 = Object2;
或
Object2 = Object1;
这使得两个变量包含引用同一对象的2个引用。通过访问变量Object1
编辑对象时,可以通过Object2
访问对象来查看效果。因为它们是同一个对象。
答案 1 :(得分:1)
您可以阅读以下详细信息: Deep Copy vs Shollow Copy
如果你想要改变那种行为而不是你需要使用克隆/复制,现在你正在分配引用,这就是为什么它在对象中都有变化,
因为属性是字节数组,那么你可以这样做,Array.CopyTo Method (Array, Int32)
Array1.CopyTo(Array2, 0);//
所以在你的情况下它就像
Object2.property1.CopyTo(Object1.property1,0);
Object2.property1= **y**;
答案 2 :(得分:0)
您可能需要查看this Microsoft doc。值和引用类型变量的概念是c#的一个非常基本且非常重要的概念。 简单地说:如果你创造一个像这样的物体:
object2 = object1;
你真的没有创建一个新对象。您只需使用第二个对象引用第一个对象。如果那些被编辑的人都同时进行,因为他们毕竟是同一个对象。
不幸的是,没有内置的方法可以简单地克隆一个对象,但你可以创建一个重载来创建一个新对象,并将源对象作为参数传递给所有属性单独进行复制。如果属性太多,您还可以使用反射来程序复制对象中定义的所有属性。