引用c#中的对象

时间:2012-08-15 21:17:56

标签: c# object reference

我有一个名为node的类。我想在每个节点中存储父节点,如下所示:

public class Node
{
    public Node parent;
}

所以说我将父节点分配给节点:

Node n = new Node();
Node n2 = new Node();
n.parent = n2;

如果我改变n2,那么n的父变量也会改变吗?

6 个答案:

答案 0 :(得分:4)

不,parent的{​​{1}}变量不会改变:一旦复制了引用,它就会获得自己的生命。但是,如果您更改了n指向的Noden2的父级将会看到此更改。例如,如果您设置nn2.parent = n3也会更改为n.parent.parent

答案 1 :(得分:1)

是的,这是参考资料,n.parent = n2;

要明确的是,如果您更改N2(即N2.prop = newvalue),当您执行n.Parent.prop时,它将成为newvalue

答案 2 :(得分:1)

public class Node
{
   public string a;
   public Node parent;
}

Node n = new Node();

Node n2 = new Node();
n2.a = "1";
n.parent = n2; 

// n.parent.a is "1" now

n2.a = "2";

// n.parent.a is "2" now

答案 3 :(得分:1)

将类类型的变量,参数,数组槽等视为保存“对象ID”。类似n1.parent = n2;的语句说“查找由n1中存储的对象ID标识的对象,其类型为Node;更改该对象的parent字段以包含对象ID存储在n2“。

假设n1最初被分配[对象ID#1]并且n2最初被分配[对象ID#2]。语句n1.parent = n2将使对象#1的parent字段包含[对象ID#2]。如果在n2.someProperty = 5中存储任何其他内容之前要执行n2之类的语句,则该语句将修改Object#2的该属性。由于Object#1的parent字段包含[Object ID#2],因此该语句似乎也会修改n1.parent.someProperty。另一方面,如果要将一个不同的对象ID存储到n2中,这对n1.parent没有影响,{{1}}将继续保持[对象ID#2]。

答案 4 :(得分:0)

是的,因为它是参考。它将在n和n2中更新

答案 5 :(得分:0)

是的,您通过引用引用同一个对象。