程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# Tips-淺拷貝和深拷貝(shallow copy VS deep copy )(3)

C# Tips-淺拷貝和深拷貝(shallow copy VS deep copy )(3)

編輯:關於C語言
拷貝實現

相對於淺拷貝,是指依照源對象為原型,創建一個新對象,將當前對象的所有字段進行執行逐位復制並支持遞歸,不管是是值類型還是引用類型,不管是靜態字段還是非靜態字段。

在C#中,我們們有三種方法實現深拷貝

實現ICloneable接口,自定義拷貝功能。

ICloneable 接口,支持克隆,即用與現有實例相同的值創建類的新實例。

ICloneable 接口包含一個成員 Clone,它用於支持除 MemberwiseClone 所提供的克隆之外的克隆。Clone 既可作為深層副本實現,也可作為淺表副本實現。在深層副本中,所有的對象都是重復的;而在淺表副本中,只有頂級對象是重復的,並且頂級以下的對象包含引用。 結果克隆必須與原始實例具有相同的類型或是原始實例的兼容類型。

代碼實現如下:

 public class Person:ICloneable
    {
        public int Age { get; set; }
        public string Address { get; set; }
        public Name Name { get; set; }

        public object Clone()
        {
            Person tem = new Person();
            tem.Address = this.Address;
            tem.Age = this.Age;

            tem.Name = new Name(this.Name.FristName, this.Name.LastName);

            return tem;
        }
    }

    public class Name
    {
        public Name(string frisName, string lastName)
        {
            FristName = frisName;
            LastName = lastName;
        }
        public string FristName { get; set; }
        public string LastName { get; set; }
    }

大家可以看到,Person類繼承了接口ICloneable並手動實現了其Clone方法,這是個簡單的類,試想一下,如果你的類有成千上萬個引用類型成員(當然太誇張,幾十個還是有的),這是不是份很恐怖的勞力活?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved