Подтвердить что ты не робот

Что использование string.Clone()?

есть 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?

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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