2010-08-12 14 views
20

hay 2 ejemplos de código: # 1¿cuál es el uso de string.Clone()?

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

y # 2

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

parece que son idénticos o no? Entonces, ¿cuál es el beneficio de usar Clone()? ¿Me puede dar un ejemplo cuando no puedo usar el código n. ° 1 sino el código n. ° 2?

Respuesta

17

Esto es útil ya que la cadena implementa ICloneable, por lo que puede crear una copia de clones para una colección de ICloneable artículos. Esto es aburrido cuando la colección es solo de cadenas, pero es útil cuando la colección contiene varios tipos que implementan ICloneable.

En cuanto a copiar una sola cadena, no tiene uso, ya que devuelve por diseño una referencia a sí mismo.

+0

¿Pero por qué puedo necesitar la copia de una colección de objetos IClonable? ¿Cómo usar esa colección más allá de crear una copia más =)? Es lo mismo que una colección de "System.Object": es un callejón sin salida. –

3

.Clone() en el código anterior es el mismo que la asignación simple. Además, la cadena es inmutable, por lo que copiará en escritura en ambos casos.

.Clone() sería mucho más útil en los casos en que utiliza diferentes tipos, que implementan la misma interfaz (en este caso IClonable) ya que no podría usar una asignación simple, pero aún podría lanzar el objeto devuelto por Clone() a ICloneable y asignar esa referencia. Por ejemplo, iterar a través de una colección genérica con elementos ICloneable.

17

No directamente en respuesta a su pregunta, pero en el caso de que realmente desee clonar una cadena, puede utilizar el método static string.Copy().

Cuestiones relacionadas