.NET,如何确定字段是否已被清零

Dav*_*dge 1 c# garbage-collection memory-management

我很确定这很简单.我试图搜索,但没有快乐.

假设我有一个类型的对象A,它有一个F类型的公共字段B.我创建了一个实例B和设置A.F=B.

结果A.F == null是假的.结果A.F is B是真的.

但后来B设置为null.该A.F属性仍然保存旧实例的句柄B.运行时查找A.F仍然显示为类型B.所以测试A.F == null仍然给出False,测试A.F is B仍然给出True.尽管B已被摧毁.

那么如何检查A.F属性以查看它的句柄现在是否指向消失的对象?

Mar*_*ell 8

.NET引用永远不会指向消失的对象; 这就是GC的全部要点.您的示例描述了对单个对象的两个单独但相同的引用.更改一个引用不会改变任何其他引用.基本上你所描述的是:

 int x = 1;
 obj.Foo = x;
 x = 0;
Run Code Online (Sandbox Code Playgroud)

然后期望obj.Foo为0.它不会是:直到你改变它才会是1.参考文献的工作方式相同.

你没有"垃圾"的实例B.那个例子仍然非常开心.你刚刚删除了一个引用.

换句话说:在我的Facebook上,我将"Donna"列为我的妻子.如果我现在清楚那个领域(我没有计划做),我还没有删除她的帐户.