コードの記述を持ちます:
コード
クラス
プログラム
{
静的 ボイド メイン(文字列[]引数) { DoWork()。 Console.WriteLineを(P.Target == NULL )。 GC.Collect(); Console.WriteLineを(P.Target == NULL )。 Console.ReadLine(); } パブリック静的 弱い参照P。パブリック静的ボイド DoWork() { VARのP = GetPerson()。 P = 新しい 弱い参照(P)。 }
公共の 静的な 人GetPerson() { 返す新しい )(人を。 } } パブリッククラス 人:IDisposableを { パブリック 人() { ため (int型 I = 0 ; iは < 新しい ランダム()次に(18 、 80 ); iは++を) { この.Memo.Append((CHAR )新しい ランダム().Next(97 、 123 )); } }
公共 のStringBuilderメモ{ 取得します 。 セット ; }
パブリック ブール IsDisposed { 得ます。 セット; } #region IDisposableを成员公共のボイド のDispose() { 場合 (!この.IsDisposed) { Console.WriteLineを(" 人処分... " ); この.Memo.Remove(0 、 この.Memo.Length)。これは.IsDisposed = 真; GC.SuppressFinalize(
この );
}
}
#endregion 〜人() { Console.WriteLineを(" 人物Unctor ... " )。この.Dispose(); } }
{
静的 ボイド メイン(文字列[]引数) { DoWork()。 Console.WriteLineを(P.Target == NULL )。 GC.Collect(); Console.WriteLineを(P.Target == NULL )。 Console.ReadLine(); } パブリック静的 弱い参照P。パブリック静的ボイド DoWork() { VARのP = GetPerson()。 P = 新しい 弱い参照(P)。 }
公共の 静的な 人GetPerson() { 返す新しい )(人を。 } } パブリッククラス 人:IDisposableを { パブリック 人() { ため (int型 I = 0 ; iは < 新しい ランダム()次に(18 、 80 ); iは++を) { この.Memo.Append((CHAR )新しい ランダム().Next(97 、 123 )); } }
公共 のStringBuilderメモ{ 取得します 。 セット ; }
パブリック ブール IsDisposed { 得ます。 セット; } #region IDisposableを成员公共のボイド のDispose() { 場合 (!この.IsDisposed) { Console.WriteLineを(" 人処分... " ); この.Memo.Remove(0 、 この.Memo.Length)。これは.IsDisposed = 真; GC.SuppressFinalize(
この );
}
}
#endregion 〜人() { Console.WriteLineを(" 人物Unctor ... " )。この.Dispose(); } }
ます。https://www.cnblogs.com/sofire/archive/2010/05/26/1744266.htmlで再現