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
属性以查看它的句柄现在是否指向消失的对象?
.NET引用永远不会指向消失的对象; 这就是GC的全部要点.您的示例描述了对单个对象的两个单独但相同的引用.更改一个引用不会改变任何其他引用.基本上你所描述的是:
int x = 1;
obj.Foo = x;
x = 0;
Run Code Online (Sandbox Code Playgroud)
然后期望obj.Foo为0.它不会是:直到你改变它才会是1.参考文献的工作方式相同.
你没有"垃圾"的实例B
.那个例子仍然非常开心.你刚刚删除了一个引用.
换句话说:在我的Facebook上,我将"Donna"列为我的妻子.如果我现在清楚那个领域(我没有计划做),我还没有删除她的帐户.