какой смысл использовать строку? 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?

28
задан Arseny 13 August 2010 в 07:57
поделиться

3 ответа

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

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

25
ответ дан 28 November 2019 в 03:17
поделиться

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

21
ответ дан 28 November 2019 в 03:17
поделиться

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

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

3
ответ дан 28 November 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: