你已經有了一個簡單的類:是一個對象的引用是否爲值類型的變量?
public class foo {
public object Property { get; set; }
public void AMethod() {
Property = new object();
object x = Property;
}
}
正如我們所知,物業屬性具有保存對象引用一個隱藏的後備字段。問題是:是否支持字段像結構一樣處理?
我的意思是分配在堆棧上的x的內存?它是否收集垃圾?或者當方法返回時被釋放?
編輯
我的評論,而不是回答的,因爲這裏的文本太長,以適應評論。
我對x有興趣。我不知道.Net框架中的任何類名爲「ObjectReference」。所有討論的人都是「我有一個對象的引用」,並且使用引用調用對象的方法。
事實是,對象的引用和對象本身並不是同一個東西。他們都佔據不同的記憶塊。當你將一個對象作爲參數傳遞給一個方法時,你不會傳遞該對象,而是引用它。該引用從「ObjectReference」變量複製到堆棧。
參考文獻是非常重要的。你不能操縱沒有一個的對象;甚至「this」(或者當你訪問它內部的對象成員時隱含的「this」)實際上是對象佔據的特定內存塊的引用。
我不認爲很多人對引用作爲單獨的實體有任何想法。它們無處不在,如果沒有它們,你就無法做任何事情。
所以我想要在這裏是,如果有一個ObjectReference類,它會是一個結構?它看起來像參考本身的內存被視爲一個結構。
x在方法超出範圍時被釋放。 x基本上持有對當前存儲在Property中的對象/值的引用。 – Nkosi
你問'x'還是'Property'?還是「財產」的隱藏支持領域? – mjwills
你顯然知道'struct'和「在堆棧上分配」是完全無關的...只是檢查...(我的信封估計值將是堆中分配的所有struct的33%) –