Как клонировать объекты - PullRequest
49 голосов
/ 19 марта 2011

Когда я делаю следующее ... все, что делается для Персоны b, модифицирует Персона a (я думал, что это приведет к клонированию Персоны b от Персоны a). Я также понятия не имею, если смена Person a изменит Person b после связывания. Из-за моего кода сейчас я вижу это только в 1 направлении.

Person a = new Person() { head = "big", feet = "small" };
Person b = a; 

b.head = "small"; //now a.head = "small" too   

Теперь, если я сделаю это вместо этого ... Персона а станет совершенно отдельной.

Person b = new Person() { head = a.head, feet = a.feet };

Теперь это прекрасно и имеет смысл, если сравнивать это поведение с другими вещами в C #. НО, это может стать очень раздражающим с большими объектами.

Есть ли способ, чтобы сократить это вообще?

Например:

Person b = a.Values;

Ответы [ 11 ]

0 голосов
/ 19 марта 2011

Это происходит потому, что «Person» - это класс, поэтому он передается по ссылке.В выражении «b = a» вы просто копируете ссылку на единственный экземпляр «Person», который вы создали с ключевым словом new.

Самый простой способ получить искомое поведение -использовать "тип значения".

Просто измените объявление Person с

class Person

на

struct Person
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...