对象销毁和空链接
本文关键字:链接 对象 | 更新日期: 2023-09-27 18:34:54
我很困惑。我一直认为,只要 C# 中至少有一个指向对象的链接,该对象就会一直存在,而完全销毁该对象的唯一方法是消除所有链接(通过将它们设置为 null
或其他内容(,并等待 GC 销毁它。
但是现在使用 Unity3D 的实验让我认为这种信念是不准确的,正如代码所示:
GameObject objA = new GameObject();
Debug.Log("Is null: " + (objA == null));
GameObject.DestroyImmediate(objA);
Debug.Log("Now is null: " + (objA == null));
输出是两个测量值:
Is null: False
Now is null: True
因此,只需调用一些神奇的方法DestroyImmediate
我就可以摆脱我的对象,等等,链接objA
会自动重置为null
!这到底是怎么回事?你能想象DestroyImmediate
里面是什么吗?这可以在普通的C#中完成吗,或者这是Mono和/或Unity3D的一些肮脏的技巧?
更新:正如向我指出的那样,实验实际上并没有证明物体被摧毁了。但这不是我主要关心的问题。我主要担心的是链接以某种方式被取消了。
可以使用反射器查看 .NET 程序集内部: http://www.red-gate.com/products/dotnet-development/reflector/并检查其代码。
好吧,多亏了特雷弗,真相很快就浮出水面。
objA
实际上并没有被分配到null
。相反,对象本身会发生变化,并且重载的 == 运算符开始返回true
与 null
。