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"列为我的妻子.如果我现在清楚那个领域(我没有计划做),我还没有删除她的帐户.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |