我有一个名为node的类。我想在每个节点中存储父节点,如下所示:
public class Node
{
public Node parent;
}
所以说我将父节点分配给节点:
Node n = new Node();
Node n2 = new Node();
n.parent = n2;
如果我改变n2,那么n的父变量也会改变吗?
答案 0 :(得分:4)
不,parent
的{{1}}变量不会改变:一旦复制了引用,它就会获得自己的生命。但是,如果您更改了n
指向的Node
,n2
的父级将会看到此更改。例如,如果您设置n
,n2.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)
是的,您通过引用引用同一个对象。