C# 在c语言中引用对象#

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

我有一个叫做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=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引用的所有其他内容都是可见的。”这就是我要说的“是”。我不瘦