>>435
class Hello {
 bool finalized = false;
 public Hello() { Console.WriteLine("init"); }
 ~Hello() { finalized = true; Console.WriteLine("fin"); }
 public bool Finalized { get { return finalized; }}
 public void ReInit() {
  if (finalized) { finalized = false; GC.ReRegisterForFinalize(this); Console.WriteLine("re-init"); }
 }
 public void Say() { Console.WriteLine("Alive : {0}", !finalized); }
}

class TestWR {
 WeakReference wr = new WeakReference(new Hello(), true);
 void InvokeWR() {
  Hello h = (Hello) wr.Target;
  if (h == null) { h = new Hello(); wr = new WeakReference(h, true); }
  else if (h.Finalized) h.ReInit();
  h.Say();
 }