Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建对象的备份_C#_Wpf - Fatal编程技术网

C# 创建对象的备份

C# 创建对象的备份,c#,wpf,C#,Wpf,我有一个自定义对象,希望用户对其进行编辑,但在编辑之前,我希望对该对象进行备份,以便在必要时用于恢复 基本上,用户将拥有ObjectA,该ObjectA包含他们所需的所有信息,他们单击编辑,ObjectA的备份创建为ObjectB,用户可以对ObjectA进行更改,然后用户可以单击取消放弃对ObjectA所做的任何更改,该更改实质上只是用备份对象ObjectB替换ObjectA 创建新对象而不是简单地创建另一个对象引用的最佳方法是什么 // User has their main object

我有一个自定义对象,希望用户对其进行编辑,但在编辑之前,我希望对该对象进行备份,以便在必要时用于恢复

基本上,用户将拥有ObjectA,该ObjectA包含他们所需的所有信息,他们单击编辑,ObjectA的备份创建为ObjectB,用户可以对ObjectA进行更改,然后用户可以单击取消放弃对ObjectA所做的任何更改,该更改实质上只是用备份对象ObjectB替换ObjectA

创建新对象而不是简单地创建另一个对象引用的最佳方法是什么

// 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

标准方法是实现iClonable:


MemberwiseClone创建一个浅拷贝。

您还可以在CustomObject内部创建一个功能备份,然后进行恢复。另一个想法的可能重复是您实现了一个克隆功能,该功能将返回CustomObject的深度拷贝
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