Как работают струны при мелком копировании чего-либо на С#?
Строки считаются ссылочными типами, но могут действовать как значения. Когда мелкое копирование чего-либо вручную или с помощью элемента MemberwiseClone(), как обрабатываются строки? Рассматриваются ли они отдельно и изолированы от копии и мастера?
Ответы
Ответ 1
Строки ARE ссылочные типы. Однако они неизменяемы (они не могут быть изменены), поэтому было бы неважно, копируются ли они по значению или копируются по ссылке.
Если они скопированы в мелкие скобки, ссылка будет скопирована... но вы не можете изменить их, чтобы сразу не влиять на два объекта.
Ответ 2
Рассмотрим это:
public class Person
{
string name;
// Other stuff
}
Если вы вызываете MemberwiseClone, вы получите два отдельных экземпляра Person, но их переменные name
, в то время как разные, будут иметь одинаковое значение - они будут ссылаться на один и тот же экземпляр строки. Это потому, что это мелкий клон.
Если вы измените имя в одном из этих экземпляров, это не повлияет на другое, потому что две переменные сами по себе являются отдельными - вы просто изменяете значение одного из них, чтобы ссылаться на другую строку.
Ответ 3
Вы копируете только ссылку (подумайте "указатель" ); две ссылки являются отдельными (но имеют одинаковое значение), но существует только один строковый объект.