какая польза от string.Clone ()? - PullRequest
       0

какая польза от string.Clone ()?

27 голосов
/ 12 августа 2010

есть 2 примера кода: # 1

 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?

Ответы [ 3 ]

24 голосов
/ 12 августа 2010

Это полезно, поскольку в строке реализовано ICloneable , поэтому вы можете создать копию клонов для коллекции ICloneable элементов.Это скучно, когда коллекция состоит только из строк, но полезно, когда коллекция содержит несколько типов, которые реализуют ICloneable .

Что касается копирования одной строки, она бесполезна, поскольку возвращаетпо замыслу ссылка на себя.

21 голосов
/ 13 августа 2010

Непосредственно в ответе на ваш вопрос, но если вы действительно хотите клонировать строку, вы можете использовать метод static string.Copy ().

3 голосов
/ 12 августа 2010

.Clone () в приведенном выше коде аналогично простому назначению. Кроме того, строка неизменна, поэтому она будет копироваться при записи в обоих случаях.

.Clone () будет намного полезнее в тех случаях, когда вы используете разные типы, которые реализуют один и тот же интерфейс (в данном случае IClonable), поскольку вы не сможете использовать простое назначение, но все равно можете привести объект, возвращенный Clone () для ICloneable и назначить эту ссылку. Например, перебирая общую коллекцию с элементами ICloneable.

...