इस साइट के बाद कैसे बनाएं: 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
)
हमें यह देखने के लिए कि क्या गलत हुआ है, हमें आपके कोड को देखने की आवश्यकता है। समस्या का प्रदर्शन करने वाला सबसे छोटा कोड नमूना सबसे अच्छा होगा। –
हां, एहसास हुआ कि :) अब इसे कार्यान्वित करें, धन्यवाद – dylanmensaert
ठीक है, ऐसा लगता है कि आप केवल ऑब्जेक्ट का उथला क्लोन कर रहे हैं। उदाहरण के लिए, 'sudokuClone.Grid = (फ़ील्ड [,]) यह। ग्रिड' एक नई प्रतिलिपि पर 'sudokuClone.Grid' को इंगित नहीं कर रहा है! –