为什么对象引用不是指引用的对象?

时间:2012-11-08 22:07:00

标签: c# reference

我需要更改从GetCell方法获得的数组单元格对象。当我尝试更改收到的对象时,它不会更改原始对象。

这就是它在代码中的样子:

// this is in MyClass
A[,] arr = new A[100,500];

// this is in main class
MyClass GetAAt(Point p) { return myClass.arr[p.X,p.Y]; }
var a = GetAAt(new Point(23,45));
a = new A(); // this only changes the local `a` but not the arr[23,45]

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

您没有更改收到的对象 相反,您正在更改用于保存接收对象的变量,而不是保留一个全新的对象。

答案 1 :(得分:1)

您正在为变量a分配新实例。您可以向班级添加新方法

void SetAAt(Point p, A a) 
{ 
    arr[p.X,p.Y] = a; 
}

并将其称为:

Point p = new Point(23,45);
var a = new A();
SetAAt(p, a);

P.S。您不应该为您的数组命名与类相同的名称。虽然有可能,但我认为这不是一个好习惯。

答案 2 :(得分:0)

aarr[23, 45]都是引用类型(指针)

a设置为new A()只会使其指向新对象。它实际上并没有改变它指向的对象。

您可能需要向MyClass添加删除/重新初始化值的方法

尝试向MyClass

添加与此类似的方法
public void ResetAAt(int i, int j)
{
    arr[i, j] = new A();
}