44 lines
758 B
C#
44 lines
758 B
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace System
|
|
{
|
|
partial class WeakReference
|
|
{
|
|
bool trackResurrection;
|
|
GCHandle handle;
|
|
|
|
public virtual bool IsAlive {
|
|
get {
|
|
return Target != null;
|
|
}
|
|
}
|
|
|
|
public virtual object Target {
|
|
get {
|
|
if (!handle.IsAllocated)
|
|
return null;
|
|
return handle.Target;
|
|
}
|
|
set {
|
|
handle.Target = value;
|
|
}
|
|
}
|
|
|
|
~WeakReference ()
|
|
{
|
|
handle.Free ();
|
|
}
|
|
|
|
void Create (object target, bool trackResurrection)
|
|
{
|
|
if (trackResurrection) {
|
|
this.trackResurrection = true;
|
|
handle = GCHandle.Alloc (target, GCHandleType.WeakTrackResurrection);
|
|
} else {
|
|
handle = GCHandle.Alloc (target, GCHandleType.Weak);
|
|
}
|
|
}
|
|
|
|
bool IsTrackResurrection () => trackResurrection;
|
|
}
|
|
} |