我知道有一些差別,C#中值類型和引用類型之間有什麼區別?
- 值類型的存儲位置作爲參考類型存儲在託管堆上在棧上。
- 值類型變量直接包含其值,其中作爲參考變量僅保持到被託管堆上創建的對象的位置的參考。
是否有任何其他區別,我錯過......如果是這樣,它們是什麼?
我知道有一些差別,C#中值類型和引用類型之間有什麼區別?
是否有任何其他區別,我錯過......如果是這樣,它們是什麼?
請閱讀:The stack is an implementation detail,不要以後再重複堆棧分配就是與引用類型的.NET區別值類型的鴨式佈局。 CLR可以選擇在任何想要的地方分配一個變量。
最重要的區別是在分配語義。將值類型分配給變量(或將其作爲參數傳遞給方法)時,所有數據都將被複制。分配引用類型時,只複製引用 - 兩個引用都指向內存中的同一個對象實例。
有點粗俗,但嘿,這是我學到的最好的方式,就像你對甘道夫生氣並等待他用他的聲音向你解釋給你帶來的煩惱一樣,它傾向於堅持= d – Coops 2012-11-19 15:54:15
正如Aaronaught和Eric的博客文章中提到:
記住的規則,引用類型總是去堆,而值類型總是去他們宣稱在哪裏呢?如果值類型在方法之外聲明,但在引用類型內部,它將被放置在堆中的引用類型中。
我覺得值隱含分配內存,但不引用它們必須被分配內存類型明確
這裏有一些額外的差異:
問了很多次了,所以...... – 2010-03-10 06:20:53
@Wheat,快速搜索,不,這個問題沒有被問到或直接回答。 – strager 2010-03-10 06:22:50
我沒有時間在此刻完全回答這個問題 - 但我只是想指出,「值類型存儲在堆棧上」是言過其實。請參閱http://pobox.com/~skeet/csharp/memory.html。有關引用類型與值類型的更多信息,請參閱http://pobox.com/~skeet/csharp/references.html – 2010-03-10 06:25:25