WeakReference クラス

"弱い参照" を表します。弱い参照は、ガベージ コレクションの対象のまま、オブジェクトを参照します。

この型のすべてのメンバの一覧については、WeakReference メンバ を参照してください。

System.Object
   System.WeakReference

<Serializable>
Public Class WeakReference   Implements ISerializable
[C#]
[Serializable]
public class WeakReference : ISerializable
[C++]
[Serializable]
public __gc class WeakReference : public ISerializable
[JScript]
public
   Serializable
class WeakReference implements ISerializable

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

共通言語ランタイムの "ガベージ コレクション" の機構が、オブジェクトに割り当てられた、アクセスできない (つまり "到達できない") メモリを解放します。オブジェクトの参照が null 参照 (Visual Basic では Nothing) に設定される場合のように、オブジェクトの参照がすべて無効になると、このオブジェクトへアクセスできなくなります。

Finalize メソッドが存在し、さらにこのメソッドを呼び出すように指示されている場合には、ガベージ コレクションは、オブジェクトに対してこのメソッドを呼び出します。これにより、"終了"が実行されます。終了の完了後に、ガベージ コレクションで収集されたオブジェクトが再び取得されて再使用されると、予期できない結果が発生します。

直接的または間接的に参照されているオブジェクトは到達可能であるため、ガベージ コレクタはこのようなオブジェクトを消去できません。到達可能なオブジェクトへの参照は、"強い参照" と呼ばれます。

弱い参照でも、到達可能なオブジェクトが参照されます。このようなオブジェクトはターゲットと呼ばれます。ユーザーがターゲットへの強い参照を取得するには、 Target プロパティの値を変数に割り当てます。ただし、強い参照で参照されないターゲットは、弱い参照で参照されてもガベージ コレクションの対象になります。

オブジェクトがガベージ コレクションの対象になる時点と、このオブジェクトが収集される時点との間に遅延が生じることがあります。ターゲットの収集後に、ユーザーがこのターゲットを取得しようとすると、null 参照だけが取得されます。ターゲットがまだ収集されていない場合には、有効な参照を取得できます。

オブジェクトは、使用され (つまり、生きている状態)、使用し終わると、ガベージ コレクションの対象になります (つまり、死んだ状態)。その後、再び使用される場合があります (つまり、復活した状態)。ただし、終了後に再生されたオブジェクトにアクセスすると、予測できない動作が発生します。

WeakReference オブジェクトは、終了後にターゲットへの参照を維持するかどうか、つまり弱い参照によりターゲットの再生を追跡するかどうかを指定できます。再生を追跡しない弱い参照は、"短い弱い参照" と呼ばれます。再生を追跡する弱い参照は、"長い弱い参照" と呼ばれます。

必要条件

名前空間: System

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

WeakReference メンバ | System 名前空間 | GC | Finalize