1

これは簡単です、きっと。私は検索しようとしましたが、喜びはありません。

Atypeの public フィールドを持つFtypeのオブジェクトがあるとしますBBと setのインスタンスを作成しますA.F=B

の結果A.F == nullは False です。の結果A.F is Bは True です。

ただし、Bnull に設定されます。プロパティは、のA.F古いインスタンスへのハンドルを保持していますB。そして、 のランタイム ルックアップは、A.Fそれを type として表示しBます。したがって、テストA.F == nullはまだ False を返しますが、テストA.F is Bはまだ True を返します。ゴミ捨て済みなのにB

では、プロパティをチェックしてA.F、そのハンドルが消えたオブジェクトを指しているかどうかを確認するにはどうすればよいでしょうか?

4

2 に答える 2

8

.NET 参照は、消滅したオブジェクトを指すことはありません。それがGCの要点です。あなたの例は、単一のオブジェクトへの2つの別個の同一の参照を説明しています。1 つの参照を変更しても、他の参照は変更されません。基本的にあなたが説明することは次のようなものです:

 int x = 1;
 obj.Foo = x;
 x = 0;

そして、obj.Foo が 0 であることを期待します。そうではありません。変更するまでは 1 になります。参照は同じように機能します。

のインスタンスを「破棄」しませんでしたB。そのインスタンスはまだ完全に幸せです。それへの参照を 1 つ削除しました。

別の言い方をすれば、私の Facebook では、「Donna」を妻として挙げています。そのフィールドをクリアしたとしても (これを行う予定はありません)、彼女のアカウントは消去されていません。

于 2013-01-05T10:07:48.920 に答える
0

A.F == nullisFalseA.FisBの場合、A.FBは null ではない同じオブジェクトを参照しています。B以前に null に設定したため、コードのこの時点で null にする必要があると思われる場合は、コードに別のバグがある可能性があります。

于 2013-01-05T15:03:57.620 に答える