1

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

public class Node
{
    public Node parent;
}

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

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

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

4

6 回答 6

4

不,parent变量 ofn不会改变:一旦引用被复制,它就会拥有自己的生命。但是,如果您更改Node指向的n2,则n的父级将看到该更改。例如,如果您设置n2.parent = n3,n.parent.parent也会更改n3为。

于 2012-08-15T21:20:27.580 回答
1

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

需要明确的是,如果您更改 N2(即N2.prop = newvalue),那么当您更改时n.Parent.prop,它将是newvalue.

于 2012-08-15T21:19:50.840 回答
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
于 2012-08-15T21:24:22.223 回答
1

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

假设n1最初分配了 [Object ID#1] 并n2最初分配了 [Object ID#2]。该语句n1.parent = n2将使parentObject #1 的字段包含 [Object ID #2]。如果要执行一个语句,就像n2.someProperty = 5之前将任何其他内容存储在 中一样n2,该语句将修改 Object #2 的该属性。由于parentObject #1 的字段包含 [Object ID#2],因此该语句也将显示为 modify n1.parent.someProperty。另一方面,如果将不同的对象 ID 存储到n2中,则不会影响n1.parent,它将继续保存 [对象 ID #2]。

于 2012-08-15T21:33:51.650 回答
0

是的,因为它是通过引用。它将在 n 和 n2 中更新

于 2012-08-15T21:19:40.607 回答
0

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

于 2012-08-15T21:20:04.383 回答