2010-08-12 13 views
20

il y a 2 exemples de code: # 1Quelle est l'utilité de string.Clone()?

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

et # 2

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

On dirait qu'ils sont identiques sont-ils pas? Alors quel est l'avantage d'utiliser Clone()? pouvez-vous me donner un exemple quand je ne peux pas utiliser le code n ° 1 mais le code n ° 2?

Répondre

17

Ceci est utile car la chaîne implémente ICloneable, vous pouvez créer une copie de clones pour une collection de ICloneable articles. C'est ennuyeux quand la collection est de chaînes seulement, mais c'est utile quand la collection contient plusieurs types qui mettent en application ICloneable.

Quant à la copie d'une seule chaîne, elle n'a aucune utilité, puisqu'elle renvoie par référence une référence à elle-même.

+0

Mais pourquoi ai-je besoin de la copie d'une collection d'objets IClonable? Comment utiliser cette collection plus loin, autre que de créer une autre copie =)? C'est la même chose qu'une collection de "System.Object" - c'est une impasse. –

3

.Clone() dans le code ci-dessus est le même que l'affectation simple. De plus, la chaîne est immuable, donc elle sera copiée dans les deux cas. .Clone() serait beaucoup plus utile dans les cas où vous utilisez différents types, qui implémentent la même interface (dans ce cas, IClonable) car vous ne pourriez pas utiliser une affectation simple, mais pourrait encore cast l'objet retourné par Clone() à ICloneable et assigner cette référence. Par exemple, itérer à travers une collection générique avec des éléments ICloneable.

17

Pas directement en réponse à votre question, mais dans le cas où vous cherchez à cloner une chaîne, vous pouvez utiliser la méthode static.Copy().