对象修改如何工作?

时间:2018-01-24 06:59:24

标签: c# oop object

我有两个对象说 Object1,Object2

这两个对象具有相同的属性。

我的代码如下所示

(2*n + 1)^2 = 8*k + 1

当我尝试检索Object1.property1时,它显示 y

这里我不想更改Object1.property1,但是当Object2.property1发生变化时它会被修改。

我的问题是

为什么我的代码表现得那样或者有没有我在c#中不知道的概念?

3 个答案:

答案 0 :(得分:2)

它表现得像那样,因为你实际上没有2个物体。你只有一个。

Object1Object2只是变量。它们本身不是对象。他们存储了一个"参考"指向对象。您可以使用变量来访问该对象。在您的代码中的某些时候,您很可能已经编写了

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;

你真的没有创建一个新对象。您只需使用第二个对象引用第一个对象。如果那些被编辑的人都同时进行,因为他们毕竟是同一个对象。

不幸的是,没有内置的方法可以简单地克隆一个对象,但你可以创建一个重载来创建一个新对象,并将源对象作为参数传递给所有属性单独进行复制。如果属性太多,您还可以使用反射来程序复制对象中定义的所有属性。