对象销毁和空链接

本文关键字:链接 对象 | 更新日期: 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。相反,对象本身会发生变化,并且重载的 == 运算符开始返回truenull