WeakReference — non-generic. WeakReference<T> — generic.
WeakReference:
WeakReference<T>:
1// WeakReference2var weak = new WeakReference(new object());3if (weak.IsAlive)4 var obj = weak.Target;56// WeakReference<T>7var weak = new WeakReference<StreamReader>(reader);8if (weak.TryGetTarget(out var target))9 target.ReadLine();
Key: Use WeakReference<T> for type safety.