Я пытаюсь реализовать стек Undo / Redo в приложении C #, над которым я работаю, восстанавливая Object до предыдущего состояния при вызове undo.У меня есть класс 'Action', который выглядит в основном так:
class Action
{
object old_state;
object new_state;
public Action(object old)
{
old_state = old;
}
public void finish(object new_obj)
{
new_state = new_obj;
}
public void reverse()
{
new_state = old_state;
}
}
Когда запускается действие, которое может быть переделано, создается новое действие.Когда мы достигаем нового состояния, вызывается метод finish ().Когда пользователь хочет что-то повторить, он вызывает reverse () и восстанавливает объект в исходное состояние.
Очевидно, что это не работает, поскольку оба объекта передаются по ссылке, и объект просто заканчивается в новомгосударство.
Что я действительно хочу сделать, так это сказать:
public Action(object old)
{
old_state = old.MemberwiseClone();
}
к сожалению, это не работает, и я получаю ошибку, которая выглядит следующим образом:
Невозможно получить доступ к защищенному члену 'object.MemberwiseClone ()' через спецификатор типа 'foo.object'
Я хочу создать поверхностную копию исходного состояния (скопировать всезначения полей по значению и все ссылочные поля по ссылке), но я не могу понять, как это сделать, используя универсальные объекты, в отличие от реализации IClonable
в каждом классе, который я мог бы хотеть восстановить состояние.
Может ли кто-нибудь предложить какое-либо понимание?