对象破坏和空链接

时间:2013-10-11 20:06:02

标签: c# unity3d destroy

我很困惑。我一直认为,只要在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的一些肮脏技巧?

UPDATE :正如我所指出的那样,实验并没有真正证明对象被破坏了。但这不是我主要担心的问题。我主要担心的是链接在某种程度上无效。

2 个答案:

答案 0 :(得分:2)

您可以使用反射器查看.NET程序集内部:http://www.red-gate.com/products/dotnet-development/reflector/并检查其代码。

答案 1 :(得分:1)

好的,多亏了特雷弗的事实很快就出现了。

objA实际上并未分配null。相反,对象本身会发生变化,与true相比,重载的==运算符开始返回null