2014-01-15 65 views
-2

您能否介紹一下關於引用類型和C#中可變概念的區別? 字符串是引用類型,但不可變。請詳細說明這兩個概念之間的概念區別以及它們爲什麼獨立?C#參考類型和「可變」概念之間的區別?

+2

這是一個功課題嗎? – Dai

+3

這個問題似乎是無關緊要的,因爲它似乎是一個沒有努力的家庭作業問題,實際上並不涉及具體的編碼問題。 –

+0

然而,它對於未來對這個主題的搜索仍然很有價值。我們喜歡與否,但是它正在成爲「研究」材料的標準地點。 –

回答

9

它們是正交 -

  • 易變=屬性可以被改變;
  • 引用類型=值實際上是對實例的引用。

沒有要求參考類型是可變的,反之亦然。 String是一個不可變的引用類型。結構不是參考類型,並且可以是是可變的,但最佳實踐是它們是不可變的。

1

引用與值類型指的是複製語義。一個引用類型在被傳遞時不會被複制,而是引用(「地址」)。值類型完全被複制。可變性與此正交。你可以有可變值類型和不可變參考值。

+0

謝謝@AZ它幫助 –

-1

字符串是一個引用類型,因爲它可能是巨大的,因此不會像數值類型那樣適合堆棧。它仍然是不變的,因爲你不改變它的價值,你做一個副本,並改變副本的價值。

+0

值類型不必在堆棧中。大多數情況下他們不是。只有局部函數變量是(甚至在某些情況下不是這些變量) - 這只是一個實現細節。你的論點是無效的 –

+0

@AZ,你對Jeff的論點無效的結論是無效的;)字符串被ref-types的主要原因確實與內存有關([見這裏](http://stackoverflow.com/questions/)例如,636932/in-c-why-string-a-reference-type-that-behaves-like-a-value-type) – elgonzo

+0

@elongzo。但不是堆棧相關的,更多的是關於複製大量數據 - 這是結構體系的全部(複製)。這是一個重要的區別。在編程界有一個關於結構的巨大誤解,每次他們被談論時,他們都被放在與「棧」相同的句子中。那是錯的。 –

相關問題