Heim  >  Artikel  >  Backend-Entwicklung  >  .NET Framework-detaillierter Beispielcode zum Ändern des Klonens von „flach“ in „tief“.

.NET Framework-detaillierter Beispielcode zum Ändern des Klonens von „flach“ in „tief“.

黄舟
黄舟Original
2017-03-18 13:20:081218Durchsuche

In einigen Fällen benötigen wir eine flache Kopie, um das Problem zu lösen, da die Instanz, die wir kopieren, immer noch auf das ursprüngliche ursprüngliche Objekt verweist. Manchmal reicht dies jedoch nicht aus, da die von uns kopierte Instanz lokale Wertänderungen und Anpassungen am Referenztyp vornehmen muss und dies garantiert keine Auswirkungen auf das ursprüngliche Objekt hat!

Dies erfordert tiefes Kopieren!

Die Anforderungen lauten wie folgt:

Lassen Sie uns zunächst einen Blick darauf werfen, warum flache Kopien unsere Anforderungen nicht erfüllen können: Wir möchten den Lebenslauf kopieren, und die kopierte Version stimmt nur nicht mit dem Firmennamen in überein Bewerbungsabsicht der Vorlage Lebenslauf.

Unsere erste Version des Codes sieht so aus:

Lebenslauf

ModellVersion 1.0

    public class ResumeInfo1:ICloneable
    {        
    public ResumeInfo1(string name, string telephone, EducationInfo educationInfo,WantedJob1 job)
        {            
        this._name = name;            
        this._telephone = telephone;            
        this._educationInfo = educationInfo;            
        this._wantedJob = job;
        }        
        private string _name;        
        public string name
        {            
        get { return this._name; }
        }       
         private string _telephone;        
         public string telephone
        {            
        get { return _telephone; }
        }        
        private EducationInfo _educationInfo;        
        public EducationInfo educationInfo
        {            
        get { return _educationInfo; }
        }        
        private WantedJob1 _wantedJob;        
        public WantedJob1 WantedJob
        {            
        get { return _wantedJob; }
        }        
        public object Clone()
        {           
        return this.MemberwiseClone();
        }


    }
Das verschachtelte Unterklassen-Bildungshintergrundobjekt in EducationInfo

    public class EducationInfo
    {        
    public string schoolName { get; set; }        
    public DateTime enrollTime { get; set; }        
    public DateTime leaveTime { get; set; }
    }
Es gibt auch ein verschachteltes Objekt WantedJob1:

    public class WantedJob1
    {        
    public string companyName { get; set; }        
    public double eanrings { get; set; }

    }
Wir verwenden es auf dem Client:

            EducationInfo educationInfo = new EducationInfo();
            WantedJob1 wantedJob = new WantedJob1();
            ResumeInfo1 templateResume = new ResumeInfo1("qaz", "18810002000", educationInfo, wantedJob);
            educationInfo.enrollTime = new DateTime(2010, 7, 1);
            educationInfo.leaveTime = new DateTime(2015, 1, 1);
            educationInfo.schoolName = "wsx";
            wantedJob1.companyName = "edc";
            wantedJob1.eanrings = 1000;            
            //假定各个简历版本,仅仅companyName属性值不同。

            var res1 = templateResume.Clone();
            (res1 as ResumeInfo1).WantedJob.companyName = "baidu";            
            var res2 = templateResume.Clone();
            (res1 as ResumeInfo1).WantedJob.companyName = "ali";
Aber wir erhalten den Firmennamen „. ali“

Dies ist eine typische flache Kopie!

kann die Anforderung zur Unterscheidung des Firmennamens nicht erfüllen. Ändern Sie ihn weiter und ändern Sie ihn in Deep Copy:

    public class ResumeInfo2:ICloneable
    {        
    public ResumeInfo2(string name, string telephone, EducationInfo educationInfo,WantedJob2 job)
        {            
        this._name = name;            
        this._telephone = telephone;            
        this._educationInfo = educationInfo;            
        this._wantedJob = job;
        }        //
        private void cloneJob(WantedJob2 job)
        {            
        this._wantedJob = job.Clone() as WantedJob2;
        }        private string _name;        
        public string name
        {            
        get { return this._name; }
        }        
        private string _telephone;        
        public string 
        telephone
        {            
        get { return _telephone; }
        }        
        private EducationInfo _educationInfo;        
        public EducationInfo educationInfo
        {            
        get { return _educationInfo; }
        }        
        private WantedJob2 _wantedJob;        
        public WantedJob2 WantedJob
        {            
        get { return _wantedJob; }
        }        
        public object Clone()
        {
            cloneJob(this._wantedJob);            
            return new ResumeInfo2(_name,_telephone,_educationInfo,_wantedJob);          
        }


    }
Job-seeking Intention Object 2.0:

   //WantedJob2 实现接口
    public class WantedJob2:ICloneable
    {        
    public string companyName { get; set; }        
    public double eanrings { get; set; }        
    public object Clone()
        {            
        return this.MemberwiseClone();
        }
    }
Kundenanruf:

            //此处我们需要对WantedJob做深复制处理。

            EducationInfo educationInfo = new EducationInfo();
            WantedJob2 wantedJob = new WantedJob2();
            ResumeInfo2 templateResume = new ResumeInfo2("qaz", "18810002000", educationInfo, wantedJob);
            educationInfo.enrollTime = new DateTime(2010, 7, 1);
            educationInfo.leaveTime = new DateTime(2015, 1, 1);
            educationInfo.schoolName = "wsx";
            wantedJob.companyName = "edc";
            wantedJob.eanrings = 1000;            
            //假定各个简历版本,仅仅companyName属性值不同。

            var res1 = templateResume.Clone();
            (res1 as ResumeInfo2).WantedJob.companyName = "baidu";            
            var res2 = templateResume.Clone();
            (res2 as ResumeInfo2).WantedJob.companyName = "ali";
Besorgen Sie sich verschiedene Firmennamen! Deep Copy erfolgreich!

Das obige ist der detaillierte Inhalt von.NET Framework-detaillierter Beispielcode zum Ändern des Klonens von „flach“ in „tief“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn