我試圖通過在調用撤消操作時將對象還原到先前狀態來處理C#應用程序中的撤消/重做堆棧。我有一個「操作」類,這基本上是這樣的:使用MemberwiseClone實現撤銷/重做
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()並將Object恢復到原始狀態。
顯然這是行不通的,因爲兩個對象都是通過引用傳遞的,而對象只是以新狀態結束。
我真正想要做的是能說:
public Action(object old)
{
old_state = old.MemberwiseClone();
}
不幸的是,這並不工作,我也得到看起來像一個錯誤:
無法訪問受保護成員'object.MemberwiseClone()'通過'foo.object'類型的限定符
我想創建一個原始狀態的淺拷貝(通過val複製所有值字段ue和所有參考字段),但我無法弄清楚如何使用泛型對象來完成此操作,而不是在我可能希望恢復狀態的每個類中實現IClonable
。
任何人都可以提供任何見解嗎?
我發現這是執行撤銷/重做操作的好文章。它提供了幾種不同的實現方法:http://www.codeproject.com/KB/architecture/UndoRedoPart2.aspx – SwDevMan81 2010-06-30 21:03:27