ノードというクラスがあります。次のように、各ノード内に各ノードの親を格納します。
public class Node
{
public Node parent;
}
したがって、親をノードに割り当てるとします。
Node n = new Node();
Node n2 = new Node();
n.parent = n2;
n2 を変更すると、n の親変数も変更されますか?
いいえ、 のparent変数はn変更されません。参照がコピーされると、それ自体が有効になります。ただし、がNode指すを変更すると、の親はその変更を認識します。たとえば、 を設定すると、も同様に変更されます。n2nn2.parent = n3n.parent.parentn3
クラス型の変数、パラメーター、配列スロットなどは、「オブジェクト ID」を保持するものと考えてください。のようなステートメントn1.parent = n2;は、「 に格納されているオブジェクト ID によって識別されるオブジェクトを検索します。n1これは のタイプになります。そのオブジェクトのフィールドを、 に格納されているオブジェクト ID を含むようにNode変更します」。parentn2
最初n1に [オブジェクト ID#1]n2が割り当てられ、最初に [オブジェクト ID#2] が割り当てられたとします。このステートメントn1.parent = n2はparent、オブジェクト #1 のフィールドに [オブジェクト ID #2] を含めます。n2.someProperty = 5に他のものを格納する前のようなステートメントを実行するとn2、そのステートメントはオブジェクト #2 のそのプロパティを変更します。Object #1のparentフィールドには [Object ID#2] が保持されているため、このステートメントも変更されているように見えn1.parent.somePropertyます。一方、別のオブジェクト ID を に格納してn2も、 には影響せずn1.parent、[オブジェクト ID #2] を保持し続けます。
はい、参考までに、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
はい、参照によるものです。nとn2の両方で更新されます
はい、参照によって同じオブジェクトを参照しています。