1

プログラマーではないので、次のコードを理解したいと思います。

A a=new A();
B a=new B();

a=b;      
c=null;

b=c; 

変数が参照のみを保持している場合、「a」は最終的に null になりますか?

4

2 に答える 2

6

すべてのオブジェクト a、b、c が同じクラスからのものであると仮定すると、 にはaなりませんnullbへの代入前の参照の値を保持しますc

次のクラスがあると仮定しましょう

class Test
{
    public int Value { get; set; }
}

次に試してください:

Test a = new Test();
a.Value = 10;
Test b = new Test();
b.Value = 20;
Console.WriteLine("Value of a before assignment: " + a.Value);
a = b;
Console.WriteLine("Value of a after assignment: " + a.Value);
Test c = null;
b = c;
Console.WriteLine("Value of a after doing (b = c) :" + a.Value);

出力は次のようになります。

Value of a before assignment: 10
Value of a after assignment: 20
Value of a after doing (b = c) :20
于 2012-08-07T06:50:28.280 に答える
5

心の中で 2 つの概念を分離する必要があります。参照オブジェクト。_ 参照は、基本的にマネージド ヒープ上のオブジェクトのアドレスです。そう:

A a = new A(); // new object A created, reference a assigned that address
B b = new B(); // new object B created, reference b assigned that address
a = b; // we'll assume that is legal; the value of "b", i.e. the address of B
       // from the previous step, is assigned to a
c = null; // c is now a null reference
b = c; // b is now a null reference

これは、"a" または "A" には影響しません。「a」には、作成した B のアドレスがまだ保持されています。

いいえ、「a」は最終的にnullではありません。

于 2012-08-07T06:57:57.637 に答える