我有一个名为节点的类。我想将每个节点的父节点存储在每个节点中,如下所示:
public class Node
{
public Node parent;
}
所以说我将父节点分配给一个节点:
Node n = new Node();
Node n2 = new Node();
n.parent = n2;
如果我改变n2,n的父变量也会改变吗?
不,parent
变量 ofn
不会改变:一旦引用被复制,它就会拥有自己的生命。但是,如果您更改Node
指向的n2
,则n
的父级将看到该更改。例如,如果您设置n2.parent = n3
,n.parent.parent
也会更改n3
为。
是的,这是参考,n.parent = n2;
需要明确的是,如果您更改 N2(即N2.prop = newvalue
),那么当您更改时n.Parent.prop
,它将是newvalue
.
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
将类类型的变量、参数、数组槽等视为持有“对象 ID”。类似这样的语句n1.parent = n2;
“查找由存储在 中的对象 ID 标识的对象,该对象n1
的类型为Node
;更改该parent
对象的字段以包含存储在中的对象 ID n2
”。
假设n1
最初分配了 [Object ID#1] 并n2
最初分配了 [Object ID#2]。该语句n1.parent = n2
将使parent
Object #1 的字段包含 [Object ID #2]。如果要执行一个语句,就像n2.someProperty = 5
之前将任何其他内容存储在 中一样n2
,该语句将修改 Object #2 的该属性。由于parent
Object #1 的字段包含 [Object ID#2],因此该语句也将显示为 modify n1.parent.someProperty
。另一方面,如果将不同的对象 ID 存储到n2
中,则不会影响n1.parent
,它将继续保存 [对象 ID #2]。
是的,因为它是通过引用。它将在 n 和 n2 中更新
是的,您通过引用来引用同一个对象。