有人能给出在.net项目中使用弱引用的一些示例吗?
一个场景是你想让一个对象具有单例行为,但你不希望它使用长期引用一直存在。例如:
class ExpensiveSingleton
{
private static WeakReference _instanceWeakRef;
private ExpensiveSingleton() { ... your expensive ctor ... }
public static ExpensiveSingleton Instance
{
get
{
ExpensiveSingleton reference = null;
if(_instanceWeakRef != null)
reference = _instanceWeakRef.Target as ExpensiveSingleton; // Try a cheap access
if(reference == null)
{
reference = new ExpensiveSingleton(...); // Pay the cost
_instanceWeakRef = new WeakReference(newInstance);
}
return reference;
}
}
}
为了简洁起见,这个并没有被做成线程安全的。
这确保了你获取到的所有指向该对象的强引用都是同一个对象,并且当所有强引用都消失后,该对象最终会被回收。
new WeakReference(newInstance)
应该改为new WeakReference(reference)
吗? - si618