2010-08-12 46 views
20

有代碼2點的例子: #1string.Clone()有什麼用?

string str1 = "hello"; 
string str2 = str1; //reference to the same string 
str1 = "bye"; //new string created 

和#2

string str3 = "hello"; 
string str4 = (string)str3.Clone();//reference to the same string 
str3 = "bye";//new string created 

看起來他們是相同的,不是嗎?那麼使用Clone()有什麼好處?你能否給我一個例子,當我不能使用代碼#1但代碼#2?

回答

17

因爲字符串實現ICloneable,所以你可以爲ICloneable項目的集合創建克隆的副本,這非常有用。當集合僅包含字符串時,這很無聊,但當集合包含實現ICloneable的多種類型時,這很有用。

至於複製單個字符串,它沒有用,因爲它通過設計返回自身的引用。

+0

但是爲什麼我需要IClonable對象集合的副本?如何進一步使用該集合,而不是另外創建一個副本=)?它與「System.Object」的集合相同 - 這是一個僵局。 – 2014-08-04 15:22:56

3

。上面代碼中的.Clone()與簡單賦值相同。此外,字符串是不可變的,所以它在兩種情況下都會在寫入時複製。

。在你使用不同類型的情況下,Clone()會更有用,它會實現相同的接口(在本例中爲IClonable),因爲你不能使用簡單的賦值,但仍然可以將由Clone()返回的對象轉換爲ICloneable並分配該引用。例如用ICloneable元素遍歷泛型集合。

17

不直接回答你的問題,但如果你想要實際克隆一個字符串,你可以使用靜態的string.Copy()方法。