var a = MyClassInstance;
MyClassInstance = null;
//if (a !=null){ //why }我认为a指向MyClassInstance并且MyClassInstance等于null,那么a也必须等于null。但是a不是空的,我不明白为什么。
发布于 2011-05-16 16:25:50
变量a是一个引用,所以它保存的值是某个对象的“位置”。MyClassInstance也是一个参考。通过设置a = MyClassInstance,它们都指向同一个实例。将MyClassInstance设置为null仅影响该引用。它不会影响对象本身,也不会影响任何其他引用。
发布于 2011-05-16 16:23:55
a和MyClassInstance是对对象的引用。
更改一个引用并不会更改另一个引用。
var a = MyClassInstance; // Both references point to the same object
MyClassInstance = null; // MyClassInstance now points to null, a is not affected发布于 2011-05-16 16:27:23
因为您将null赋值给变量MyClassInstance,该变量刚刚引用了位于堆上的实际实例。您不会以任何方式接触实际的类实例。
实际上,您不能直接释放类实例占用的内存;这就是垃圾收集器的用途。它检查是否有任何对实例的引用(想想指针,但没有),如果没有,则从内存中删除/收集对象。
也许这让它变得更清晰:http://en.csharp-online.net/Value_vs_Reference
https://stackoverflow.com/questions/6014723
复制相似问题