var a = MyClassInstance;
MyClassInstance = null;
//if (a !=null){ //why }
我認爲a
點MyClassInstance
和MyClassInstance
等於空,則a
必須等於空了。但a
不爲空,我不明白爲什麼。引用類型
var a = MyClassInstance;
MyClassInstance = null;
//if (a !=null){ //why }
我認爲a
點MyClassInstance
和MyClassInstance
等於空,則a
必須等於空了。但a
不爲空,我不明白爲什麼。引用類型
可變a
是一個參考,因此它保持的值是一些對象的「位置」。 MyClassInstance
也是一個參考。通過設置a = MyClassInstance
,它們都指向相同的實例。將MyClassInstance
設置爲null只會影響該引用。它不會影響對象本身,也不會影響任何其他引用。
a
和MyClassInstance
是對對象的引用。
更改一個參考不會改變另一個參考。
var a = MyClassInstance; // Both references point to the same object
MyClassInstance = null; // MyClassInstance now points to null, a is not affected
因爲你要分配給null
剛剛引用位於堆您的實際實例變量MyClassInstance
。您不要以任何方式觸摸您的實際類實例。
事實上,你不能直接釋放你的類實例佔用的內存;這是垃圾收集器的用途。它看起來是否有任何引用(思考指針,但不是)剩下的實例,如果沒有剩餘,則從內存中刪除/收集該對象。
引用類型實例的變量主要是指向一個內存地址 - 所以你的例子是媲美
int MyClassInstance = 0x1234; // points to a memory containing *your* values
int i = MyClassInstance;
MyClassInstance = 0x0;
if (i !=0x0){ //still 0x1234, because it's a copy }
或者換句話說: 變量是引用,而不是對象本身。所以第二個變量是引用的副本。
我不認爲這是「補上」班級的正確方法。你可能不得不打電話給一個內部銷燬功能。您正在將類中的某些內容設置爲NULL,但actaull類仍然存在並且不爲空... – ppumkin 2011-05-16 08:24:10