泛型弱引用(不继承 System.WeakReference)

代码
public class WeakReference<T> : IDisposable
    {
        
private GCHandle handle;
        
private bool trackResurrection;

        
public WeakReference(T target) : this(target, false) { }

        
public WeakReference(T target, bool trackResurrection)
        {
            
this.trackResurrection = trackResurrection;
            
this.Target = target;
        }

        
~WeakReference()
        {
            Dispose();
        }

        
public void Dispose()
        {
            handle.Free();
            GC.SuppressFinalize(
this);
        }

        
public virtual bool IsAlive
        {
            
get { return (handle.Target != null); }
        }

        
public virtual bool TrackResurrection
        {
            
get { return this.trackResurrection; }
        }

        
public virtual T Target
        {
            
get
            {
                
object o = handle.Target;
                
if ((o == null|| (!(o is T)))
                    
return default(T);
                
else
                    
return (T)o;
            }
            
set
            {
                handle 
= GCHandle.Alloc(value, this.trackResurrection ? GCHandleType.WeakTrackResurrection : GCHandleType.Weak);
            }
        }
    }

 

posted @ 2010-06-09 16:58  Treenew Lyn  阅读(942)  评论(1编辑  收藏  举报