关注本网站:http ://www.csharp411.com/c-object-clone-wars/
我决定手动创建我的课程的深层副本(在站点 1. 手动克隆之后)。我实现了克隆接口和任何必要的属性。我执行了我的程序并检查了我的克隆是否确实与原始实例相同。这是正确的。
但是,我的新实例仍然引用了原始实例。因此,我的副本中的任何更改都会反映到原始实例中。
因此,如果这不会创建深层副本,那又会怎样呢?可能出了什么问题?
(我想手动做一个深拷贝来提高我的性能,所以我不想使用ObjectCopier类。(即使它工作得很好,它也会占用我 90% 的代码运行时间)。
代码片段:
类实现:
public class SudokuAlgorithmNorvig: ICloneable
{
克隆方法:
public object Clone()
{
SudokuAlgorithmNorvig sudokuClone = new SudokuAlgorithmNorvig(this.BlockRows, this.BlockColumns);
sudokuClone.IsSucces = this.IsSucces;
if (this.Grid != null) sudokuClone.Grid = (Field[,])this.Grid;
if (this.Peers != null) sudokuClone.Peers = (Hashtable)this.Peers;
if (this.Units != null) sudokuClone.Units = (Hashtable)this.Units;
return sudokuClone;
}
克隆方法调用:
SudokuAlgorithmNorvig sudokuCopy = (SudokuAlgorithmNorvig)sudoku.Clone()
我在所有其他类中都做了同样的事情(实现和设置克隆方法)。( Field
+ Coordinate
)