C# 在c语言中引用对象#
我有一个叫做node的类。我希望将每个节点的父节点存储在每个节点中,如下所示:C# 在c语言中引用对象#,c#,object,reference,C#,Object,Reference,我有一个叫做node的类。我希望将每个节点的父节点存储在每个节点中,如下所示: public class Node { public Node parent; } 假设我将父节点分配给一个节点: Node n = new Node(); Node n2 = new Node(); n.parent = n2; 如果我更改n2,n的父变量也会更改吗?是的,因为它是通过引用更改的。它将同时在n和n2中更新,因为它是通过引用更新的。它将在n和n2中更新是,这是通过引用,n.parent=n
public class Node
{
public Node parent;
}
假设我将父节点分配给一个节点:
Node n = new Node();
Node n2 = new Node();
n.parent = n2;
如果我更改n2,n的父变量也会更改吗?是的,因为它是通过引用更改的。它将同时在n和n2中更新,因为它是通过引用更新的。它将在n和n2中更新是,这是通过引用,
n.parent=n2代码>
需要说明的是,如果您更改N2(即N2.prop=newvalue
),当您执行n.Parent.prop
,它将是newvalue
是的,这是通过引用,n.parent=n2代码>
需要说明的是,如果您更改N2(即N2.prop=newvalue
),当您执行n.Parent.prop
,它将是newvalue
是的,您通过引用引用同一对象。是的,您通过引用引用同一对象。否,n
的父变量将不会更改:一旦复制引用,它将拥有自己的生命。但是,如果更改由n2
指向的节点,则n
的父节点将看到该更改。例如,如果设置了n2.parent=n3
,n.parent.parent
也将更改为n3
。否,n
的parent
变量不会更改:一旦复制了引用,它将获得自己的生命。但是,如果更改由n2
指向的节点,则n
的父节点将看到该更改。例如,如果您设置n2.parent=n3
,n.parent.parent
也将更改为n3
。将类类型的变量、参数、数组槽等视为保存“对象ID”。类似于n1.parent=n2的语句
表示“查找由存储在n1
中的对象ID标识的对象,该对象将属于Node
类型;更改该对象的parent
字段以包含存储在n2
中的对象ID”
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
假设n1
最初分配了[Object ID#1],而n2
最初分配了[Object ID#2]。语句n1.parent=n2
将使对象1的parent
字段包含[Object ID#2]。如果在将任何其他内容存储到n2
之前执行类似于n2.someProperty=5的语句,则该语句将修改Object#2的该属性。由于Object#1的parent
字段包含[Object ID#2],因此该语句似乎也会修改n1.parent.someProperty
。另一方面,如果要将不同的对象ID存储到n2
,这对n1.parent
没有影响,它将继续持有[object ID#2]。将类类型的变量、参数、数组槽等看作持有“对象ID”。类似于n1.parent=n2的语句
表示“查找由存储在n1
中的对象ID标识的对象,该对象将属于Node
类型;更改该对象的parent
字段以包含存储在n2
中的对象ID”
假设n1
最初分配了[Object ID#1],而n2
最初分配了[Object ID#2]。语句n1.parent=n2
将使对象1的parent
字段包含[Object ID#2]。如果在将任何其他内容存储到n2
之前执行类似于n2.someProperty=5的语句,则该语句将修改Object#2的该属性。由于Object#1的parent
字段包含[Object ID#2],因此该语句似乎也会修改n1.parent.someProperty
。另一方面,如果要将不同的对象ID存储到n2
,则对n1.parent
没有影响,它将继续保持[object ID#2]。您的意思是n.parent=n2
?Node.parent=n2代码>无法编译。太阳是在西方落下的吗?从答案可以看出,你的问题并不清楚。有两种解释:“如果我做了n2=something
,那么n.parent
会改变吗?”和“如果我做了n2.parent=…
,那么n.parent
会改变吗”——你想问哪一种?可能想去掉“n1”就称它为“n”,反之亦然。你的意思是n.parent=n2
?Node.parent=n2代码>无法编译。太阳是在西方落下的吗?从答案可以看出,你的问题并不清楚。有两种解释:“如果我做了n2=something
,n.parent
会改变吗?”和“如果我做了n2.parent=…
,”你想问哪一种?可能想去掉“n1”,就叫它“n”,或者反之亦然。好的,谢谢。我不确定它是否创建了一个新对象或存储了一个引用。@Sam没问题!希望有帮助。n2
是一个变量。更改该变量不会同时更改引用同一事物的所有变量。但是,更改n2
引用的内容,对于引用n2
引用的其他所有内容都是可见的。“但是,更改n2引用的内容,对于引用n2引用的所有其他内容都是可见的。”这就是我要说的“是”。我不认为这个问题是指你评论的第一部分。好的,谢谢。我不确定它是否创建了一个新对象或存储了一个引用。@Sam没问题!希望有帮助。n2
是一个变量。更改该变量不会同时更改引用同一事物的所有变量。但是,更改n2
引用的内容,对于引用n2
引用的其他所有内容都是可见的。“但是,更改n2引用的内容,对于引用n2引用的所有其他内容都是可见的。”这就是我要说的“是”。我不瘦