爲什麼String被設計爲引用類型而不是值類型?除了爲什麼System.String是一個引用類型而不是值類型的性能和可讀性之外,還有其他什麼原因嗎?
從建模的角度來看,我會將它建模爲一個值類型,因爲它代表沒有標識的東西。它沒有顯着的屬性。 (例如,我不能在一個字符串「a」和另一個字符串「a」之間做出任何區別)我知道,如果長字符串存儲在堆棧中,我會遇到嚴重的性能問題。可能這是不可能的,因爲字符串變得很長,因爲棧的大小是有限的。
如果不是爲了性能,爲什麼要將System.String設計爲引用類型? (假設任何可能的字符串最長16字節)
我想你已經看到了潛在的重複的答案http://stackoverflow.com/questions/636932/in-c-why-is-string-a-reference-type-that-behaves-like-a -值類型 。然而,我不確定你在尋找什麼樣的答案:如果你正在討論.NET框架工程,那麼最大的原因(在另一個線程中給出的)是,字符串可以具有任何大小,並且可以容易地填充1MB堆棧 - 不僅導致性能問題,而且徹底打破框架。你需要一個比「沒有破壞的框架」更好的理由嗎? – 2010-06-25 07:42:25
我正在從建模角度尋找答案。 (例如,我的答案是:我將它作爲參考類型進行建模,即使它不是用於性能和堆棧的,因爲......) – 2010-06-25 08:22:08
但值類型甚至存在的唯一原因是性能。如果有人會建模一個純粹的OOP語言(比如SmallTalk),那麼他們將永遠不會使類型在行爲上顯着不同。而一個字符串和一個int都是對象。和蜜糖一樣慢,就像SmallTalk一樣。 – 2010-06-25 09:51:59