Member 14479161 Ответов: 1

Копия подрядчик делает мелкую копию или глубокую копию данных


привет...

меня зовут мина я хочу спросить когда я создаю копию constractor сделайте это создайте глубокую копию или неглубокую копию данных как в этом коде :

public class person
{
    public string name, location;



    public person()
    {

    }



    public person(string name)
    {
        this.name = name;
    }

    public person(string location ,string name)
    {
        this.location = location;
        this.name = name;
    }

    public person(person args)
    {
        this.name = args.name;
    }
}


Что я уже пробовал:

я только что использовал точку останова в этом коде но эта штука все еще Мисси для меня

1 Ответов

Рейтинг:
5

OriginalGriff

Этот код создает неглубокую копию - но он даже не создает полную неглубокую копию, потому что location поле вообще не копируется!

Проблема в том, что неглубокая копия дублирует типы значений, но копирует ссылки на ссылочные типы, а глубокая копия дублирует оба; поэтому при неглубокой копии, если вы изменяете часть свойств ссылочного типа в копии, это влияет как на копию, так и на оригинал, но при глубокой копии это не так - но строка-плохой выбор для использования здесь, потому что, хотя это ссылочный тип, это особый случай, поскольку он неизменяем: вы не можете изменить его на созданных объектах.