1

如果我正在使用 Wea​​kReference 并使用一个对象对其进行了初始化,则该对象将变为 null 并被 GC 处理。会WeakReference.Target.GetType();失败吗?

4

2 回答 2

4

是的,它会以 , 失败NullReferenceException,因为GetType它是一个实例方法,并且WeakReference.Target如果null对象已被垃圾收集。

于 2013-07-16T09:10:42.860 回答
3

不,因为这几乎是一样的:

var a = b; 
b = null;     

//a is not null;

因此,您的WeakReference对象继续指向已成为的对象的实例null。根据文档:

如果当前 WeakReference 对象引用的对象已被垃圾回收,则返回 null;否则,对当前 WeakReference 对象所引用的对象的引用。

所以在你的对象没有被 GC收集之前,你仍然可以使用GetType(). 这是以这种方式完成的,因此您可以了解WeakReference引用的对象何时由GC.

于 2013-07-16T09:11:25.053 回答