1

クラスのオブジェクトを作成すると

A obj = new A();

後で割り当てnullます: obj = null;.

では、obj が null であるとはどういう意味ですか? それは今、それがどこを指していないことを意味し、すべてのメモリの割り当てが解除されていますか?

4

8 に答える 8

8

objnull現在、参照メモリの場所を指しています。

MSDN のnull (C# リファレンス)から:

null キーワードは、オブジェクトを参照しない null 参照を表すリテラルです。

以前に指していたオブジェクトを他のものに割り当てていない場合、そのオブジェクトは GC によるコレクションの対象になります。

于 2013-03-24T11:55:33.127 に答える
4

これは、それがどこも指していないことを意味し、メモリは将来の未定義の時間にガベージ コレクターによる割り当て解除の対象となります。

于 2013-03-24T11:54:05.923 に答える
3

nullはオブジェクトではありません。何も参照しない特別な参照値です。参照を使用してオブジェクトと通信しようとするnullと、オブジェクトがないため、エラーがスローされます。

特別な場合を必要とする参照の問題を解決するために作成されたNull Object Patternと呼ばれる設計パターンもあります。nullこのパターンのnull オブジェクトは、「ニュートラル」な動作を持つオブジェクトです。つまり、何かをするように頼まれても実際には何もせず、値を返すように頼まれても、ゼロ、空の文字列、空のリスト、およびその他の安全でニュートラルなオブジェクトを返します。

null オブジェクトと特別なnull参照を混同しないでください。

于 2013-03-24T12:19:22.403 に答える
2

内部的には、このオブジェクトがルートと見なされないことを意味します。使用可能なオブジェクト グラフには追加されません。

したがって、収集可能と見なされます。(非決定的な時間。)

于 2013-03-24T11:55:36.093 に答える
2

参照型 (クラス) は、実際にはメモリ内のデータへのポインターであることを理解する必要があります。基本的に、ポインタ (データのアドレスを含む単なるメモリの一部) を値ゼロまたは null に設定します。

実際には、これは、データへの他の参照が残っていない場合、ガベージ コレクターがそのデータをいつでも削除できることを意味します。

于 2013-03-24T11:56:56.947 に答える
2

技術的には、あなたが言うときobjのタイプのオブジェクトを含むヒープ上のメモリ位置の代替名ですAA obj = new A();

しかし、あなたが言うならobj = null;obj今はどこにも言及していません。

また、タイプ A のオブジェクトによって以前に占有されていたメモリもobj、GC が適切なタイミングであると判断したときに、GC によってオペレーティング システムに返されます。

于 2013-03-24T11:58:44.050 に答える
2

obj = 新しい A();

参照変数objA型です。Aのインスタンスを作成し、その参照をobjに割り当てています。objはAのインスタンスを参照するようになりました。

オブジェクト = ヌル

上記の割り当ては、objがnullを参照するようになったことを示しています。それは何もありません。新しく作成されたA のインスタンスは参照されなくなり、最終的にはガベージ コレクションが実行されます。

于 2013-03-24T12:29:30.007 に答える
2

これはobjどこにもポイントしないことを意味し、タイプの元の参照されたインスタンスはAgen0 に移動します。Aが実装された型である場合IDisposable、A が保持するリソースは、Dispose呼び出されたときに解放され、ファイナライズされるために抑制されます。使い捨てが明示的に破棄されていない場合、ファイナライズされるまで待機します。

後で実行がそれを再度参照し、それが gen1 に続き、場合によっては gen2 になると、その寿命は長くなります。

gc がガベージを収集するようになると、gen0 が最初に収集され、次に gen1、gen2 が選択されます。

于 2013-03-24T12:11:22.450 に答える