我很困惑。我一直认为,只要在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 :正如我所指出的那样,实验并没有真正证明对象被破坏了。但这不是我主要担心的问题。我主要担心的是链接在某种程度上无效。
答案 0 :(得分:2)
您可以使用反射器查看.NET程序集内部:http://www.red-gate.com/products/dotnet-development/reflector/并检查其代码。
答案 1 :(得分:1)
objA
实际上并未分配null
。相反,对象本身会发生变化,与true
相比,重载的==运算符开始返回null
。