このサイトに従ってください: http://www.csharp411.com/c-object-clone-wars/
クラスのディープ コピーを手動で作成することにしました(次のサイト 1. Clone Manually)。クローン インターフェイスと必要なプロパティを実装しました。プログラムを実行し、クローンが元のインスタンスと本当に等しいかどうかを確認しました。これは正しかった。
ただし、新しいインスタンスはまだ元のインスタンスを参照しています。したがって、コピーの変更は元のインスタンスに反映されます。
これでディープ コピーが作成されない場合は、どうすればよいでしょうか。何がうまくいかなかったのでしょうか?
(パフォーマンスを向上させるために手動でディープ コピーを作成したいので、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;
}
Clone メソッド呼び出し:
SudokuAlgorithmNorvig sudokuCopy = (SudokuAlgorithmNorvig)sudoku.Clone()
他のすべてのクラスで同じことを行いました(クローンメソッドの実装と設定)。( Field
+ Coordinate
)