这可能是一个简单的问题,一般而言,我对OOP还是陌生的。

如果我有一个带有一个int数组属性(和构造函数)的简单类

public class MyClass
{
  public int[] MyProperty {get; set;}
  public MyClass(){}
}


如何在不改变属性的情况下将属性值设置为对象的值?

MyClass C1 = new MyClass();
MYClass C2 = new MyClass();
int[] x = new int[3] {1,2,3};
C1.MyProperty = x;
x[2] = 7;       //this changes C1.MyProperty to a value of {1,2,7}
C2.MyProperty = x;


我希望即使更改x [2]的值,C1属性的2索引也保持为3的值。同样,我希望C2属性索引2的值始终为7。是否可以通过某种方式将属性设置为类似ValueOf(x)的值?我需要某种静态关键字吗?

最佳答案

这行:

C1.MyProperty = x;


表示MyProperty指向与x相同的引用,因此x元素的任何更改也对您的属性可见。该代码当前正在执行浅表复制。

一个简单的修复方法可能是:

C1.MyProperty = x.ToArray();


ToArray将创建一个新的数组/一个新的引用,并将其分配给MyProperty

您应该寻找deep copying objects

关于c# - 如何通过更改变量静态设置属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28886560/

10-11 03:54
查看更多