2

我很困扰。我一直认为只要在 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 的一些肮脏把戏?

更新:正如向我指出的那样,该实验实际上并不能证明该物体已被破坏。但这不是我主要关心的问题。我主要担心的是链接以某种方式无效。

4

2 回答 2

2

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

于 2013-10-11T20:12:20.717 回答
1

好的,多亏了特雷弗,真相很快浮出水面。

objA实际上并没有被分配nulltrue相反,对象本身发生了变化,重载的 == 运算符在与 比较时开始返回null

于 2013-10-11T20:38:47.437 回答