用代码说明:
代码
class
Program
{
static void Main( string [] args)
{
DoWork();
Console.WriteLine(P.Target == null );
GC.Collect();
Console.WriteLine(P.Target == null );
Console.ReadLine();
}
public static WeakReference P;
public static void DoWork()
{
var p = GetPerson();
P = new WeakReference(p);
}
public static Person GetPerson()
{
return new Person();
}
}
public class Person : IDisposable
{
public Person()
{
for ( int i = 0 ; i < new Random().Next( 18 , 80 ); i ++ )
{
this .Memo.Append(( char ) new Random().Next( 97 , 123 ));
}
}
public StringBuilder Memo { get ; set ; }
public bool IsDisposed { get ; set ; }
#region IDisposable 成员
public void Dispose()
{
if ( ! this .IsDisposed)
{
Console.WriteLine( " Person Dispose... " );
this .Memo.Remove( 0 , this .Memo.Length);
this .IsDisposed = true ;
GC.SuppressFinalize( this );
}
}
#endregion
~ Person()
{
Console.WriteLine( " Person Unctor... " );
this .Dispose();
}
}
{
static void Main( string [] args)
{
DoWork();
Console.WriteLine(P.Target == null );
GC.Collect();
Console.WriteLine(P.Target == null );
Console.ReadLine();
}
public static WeakReference P;
public static void DoWork()
{
var p = GetPerson();
P = new WeakReference(p);
}
public static Person GetPerson()
{
return new Person();
}
}
public class Person : IDisposable
{
public Person()
{
for ( int i = 0 ; i < new Random().Next( 18 , 80 ); i ++ )
{
this .Memo.Append(( char ) new Random().Next( 97 , 123 ));
}
}
public StringBuilder Memo { get ; set ; }
public bool IsDisposed { get ; set ; }
#region IDisposable 成员
public void Dispose()
{
if ( ! this .IsDisposed)
{
Console.WriteLine( " Person Dispose... " );
this .Memo.Remove( 0 , this .Memo.Length);
this .IsDisposed = true ;
GC.SuppressFinalize( this );
}
}
#endregion
~ Person()
{
Console.WriteLine( " Person Unctor... " );
this .Dispose();
}
}
转载于:https://www.cnblogs.com/sofire/archive/2010/05/26/1744266.html