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変数はn変更されません。参照がコピーされると、それ自体が有効になります。ただし、がNode指すを変更すると、の親はその変更を認識します。たとえば、 を設定すると、も同様に変更されます。n2nn2.parent = n3n.parent.parentn3

于 2012-08-15T21:20:27.580 に答える
1

クラス型の変数、パラメーター、配列スロットなどは、「オブジェクト ID」を保持するものと考えてください。のようなステートメントn1.parent = n2;は、「 に格納されているオブジェクト ID によって識別されるオブジェクトを検索します。n1これは のタイプになります。そのオブジェクトのフィールドを、 に格納されているオブジェクト ID を含むようにNode変更します」。parentn2

最初n1に [オブジェクト ID#1]n2が割り当てられ、最初に [オブジェクト ID#2] が割り当てられたとします。このステートメントn1.parent = n2parent、オブジェクト #1 のフィールドに [オブジェクト ID #2] を含めます。n2.someProperty = 5に他のものを格納する前のようなステートメントを実行するとn2、そのステートメントはオブジェクト #2 のそのプロパティを変更します。Object #1のparentフィールドには [Object ID#2] が保持されているため、このステートメントも変更されているように見えn1.parent.somePropertyます。一方、別のオブジェクト ID を に格納してn2も、 には影響せずn1.parent、[オブジェクト ID #2] を保持し続けます。

于 2012-08-15T21:33:51.650 に答える
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 に答える
0

はい、参照によるものです。nとn2の両方で更新されます

于 2012-08-15T21:19:40.607 に答える
0

はい、参照によって同じオブジェクトを参照しています。

于 2012-08-15T21:20:04.383 に答える