您能否介紹一下關於引用類型和C#中可變概念的區別? 字符串是引用類型,但不可變。請詳細說明這兩個概念之間的概念區別以及它們爲什麼獨立?C#參考類型和「可變」概念之間的區別?
回答
它們是正交 -
- 易變=屬性可以被改變;
- 引用類型=值實際上是對實例的引用。
沒有要求參考類型是可變的,反之亦然。 String
是一個不可變的引用類型。結構不是參考類型,並且可以是是可變的,但最佳實踐是它們是不可變的。
引用與值類型指的是複製語義。一個引用類型在被傳遞時不會被複制,而是引用(「地址」)。值類型完全被複制。可變性與此正交。你可以有可變值類型和不可變參考值。
謝謝@AZ它幫助 –
字符串是一個引用類型,因爲它可能是巨大的,因此不會像數值類型那樣適合堆棧。它仍然是不變的,因爲你不改變它的價值,你做一個副本,並改變副本的價值。
值類型不必在堆棧中。大多數情況下他們不是。只有局部函數變量是(甚至在某些情況下不是這些變量) - 這只是一個實現細節。你的論點是無效的 –
@AZ,你對Jeff的論點無效的結論是無效的;)字符串被ref-types的主要原因確實與內存有關([見這裏](http://stackoverflow.com/questions/)例如,636932/in-c-why-string-a-reference-type-that-behaves-like-a-value-type) – elgonzo
@elongzo。但不是堆棧相關的,更多的是關於複製大量數據 - 這是結構體系的全部(複製)。這是一個重要的區別。在編程界有一個關於結構的巨大誤解,每次他們被談論時,他們都被放在與「棧」相同的句子中。那是錯的。 –
- 1. 「類型」,「實例」,「類」和「對象」概念之間的區別
- 2. 值類型和參考類型只是c#概念?
- 3. 領域模型和概念模型之間有什麼區別
- 4. 領域模型,概念模型和商業模型等之間的區別
- 5. Callable概念和std :: is_function類型特徵之間有什麼區別?
- 6. 概念UML類圖與ERD之間的區別?
- 7. .NET中的概念幫助和API幫助之間的區別?
- 8. 在記錄Level.INFO和Level.DEBUG之間的概念區別是什麼
- 9. bin和gen之間的概念區別是什麼?
- 10. 聽衆和觀察者之間有概念上的區別嗎?
- 11. 類參考和類實例之間的區別
- 12. 軟件開發中的模型和圖之間的概念區別是什麼
- 13. 概念數據模型和ER圖之間的區別是什麼?
- 14. 參數類型之間的區別
- 15. Simulink庫和模型參考之間的區別
- 16. 短弱參考和長弱參考之間有什麼區別?
- 17. 不可變類和可變類之間有什麼區別?
- 18. C#:方法類型之間的區別
- 19. 變量賦值和傳遞參考之間有什麼區別?
- 20. C++概念lite和類型別名聲明
- 21. 超類和超類型之間的區別以及子類和子類型之間的區別
- 22. 類型別名和類型lambda之間的區別
- 23. C++ 0x概念和c#約束有什麼區別?
- 24. 靜態概念相當於通過參考概念
- 25. 在Java中的OOP概念和設計模式之間的區別(更重要)
- 26. C中的類型聲明(概念)
- 27. 子類和類別之間的區別?
- 28. 特徵和多重繼承之間有什麼概念上的區別?
- 29. UI之間真正的概念區別是什麼:裝飾和UI:包括?
- 30. 指針指針與參考指針之間的區別(C++)
這是一個功課題嗎? – Dai
這個問題似乎是無關緊要的,因爲它似乎是一個沒有努力的家庭作業問題,實際上並不涉及具體的編碼問題。 –
然而,它對於未來對這個主題的搜索仍然很有價值。我們喜歡與否,但是它正在成爲「研究」材料的標準地點。 –