Создание резервной копии объекта - PullRequest
0 голосов
/ 09 января 2019

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

По сути, у пользователя будет ObjectA, у которого есть вся необходимая информация, он нажимает кнопку «Изменить», резервная копия ObjectA создается как ObjectB, пользователь может вносить изменения в ObjectA, а затем пользователь может нажать «Отмена», чтобы отменить любые изменения. сделано в ObjectA, которая по существу просто заменяет ObjectA резервным объектом, ObjectB.

Какой лучший способ создать новый объект вместо простого создания другой ссылки на объект?

// User has their main object

CustomObject obj = new CustomObject();

// User clicks Edit and a copy of the object is stored in case obj needs to be restored

CustomObject backupObj = obj; // This only creates a reference but I'm not sure how else to show this

// User makes changes to obj but decides to discard those changes and clicks Cancel

obj = backupObj; // obj is restored

// User goes on with the program

1 Ответ

0 голосов
/ 09 января 2019

Стандартным способом является реализация ICloneable:

class CustomObject : ICloneable
{
    ... your implementation
    public object Clone()
    {
        return this.MemberwiseClone();
    }
}

CustomObject obj = new CustomObject();
CustomObject backupObj = (CustomerObject) obj.Clone(); //backup
...
// later restore
obj = backupObj

MemberwiseClone() делает мелкую копию.

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