a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

c# 深拷貝與淺拷貝的區別分析及實例

2020-01-24 03:31:26
字體:
來源:轉載
供稿:網友

      深拷貝是指源對象與拷貝對象互相獨立,其中任何一個對象的改動都不會對另外一個對象造成影響。舉個例子,一個人名叫張三,后來用他克隆(假設法律允許)了另外一個人,叫李四,不管是張三缺胳膊少腿還是李四缺胳膊少腿都不會影響另外一個人。比較典型的就是Value(值)對象,如預定義類型Int32,Double,以及結構(struct),枚舉(Enum)等。

      淺拷貝是指源對象與拷貝對象共用一份實體,僅僅是引用的變量不同(名稱不同)。對其中任何一個對象的改動都會影響另外一個對象。舉個例子,一個人一開始叫張三,后來改名叫李四了,可是還是同一個人,不管是張三缺胳膊少腿還是李四缺胳膊少腿,都是這個人倒霉。

      C#中有兩種類型變量,一種 是值類型變量,一種是引用類型變量。對于前者,copy是屬于全盤復制;而對于后者,一般的copy只是淺copy,相當于只傳遞一個引用指針一樣。因此 對于后者進行真正copy的時候,也是最費事的,具體的說,必須為其實現ICloneable接口中提供的Clone方法。

看看定義:
      淺拷貝(影子克隆):只復制對象的基本類型,對象類型,仍屬于原來的引用.
      深拷貝(深度克隆):不緊復制對象的基本類,同時也復制原對象中的對象.就是說完全是新對象產生的.

淺拷貝和深拷貝的區別
      淺拷貝是指將對象中的數值類型的字段拷貝到新的對象中,而對象中的引用型字段則指復制它的一個引用到目標對象。如果改變目標對象 中引用型字段的值他將反映在原是對象中,也就是說原始對象中對應的字段也會發生變化。深拷貝與淺拷貝不同的是對于引用的處理,深拷貝將會在新對象中創建一 個新的和原是對象中對應字段相同(內容相同)的字段,也就是說這個引用和原是對象的引用是不同的,我們在改變新對象中的這個字段的時候是不會影響到原始對 象中對應字段的內容。所以對于原型模式也有不同的兩種處理方法:對象的淺拷貝和深拷貝。

下面通過實例可以清楚看到淺拷貝與深拷貝的區別,代碼如下:

復制代碼 代碼如下:

using System;
 using System.Collections.Generic;
 using System.Text;

 namespace WindowsApplication1
 {
     class Program
     {
         public class Sex
         {
             private string _PSex;
             public string PSex
             {
                 set
                 {
                     _PSex = value;
                 }
                 get
                 {
                     return _PSex;
                 }
             }

         }

         public class Person : ICloneable
         {

             private Sex _pSex = new Sex();
             public int aa = 1213;

             public string pSex
             {
                 set
                 {
                     _pSex.PSex = value;
                 }
                 get
                 {
                     return _pSex.PSex;
                 }
             }
             private string _PName;
             public string PName
             {
                 set
                 {
                     this._PName = value;
                 }
                 get
                 {
                     return this._PName;
                 }
             }

             public void ShowPersonInfo()
             {
                 Console.WriteLine("-------------------------");
                 Console.WriteLine("Name:{0} Sex:{1}", _PName, this.pSex);
                 Console.WriteLine("-------------------------");
                 Console.WriteLine(this.aa);
             }
             //淺拷貝
             public object Clone()
             {
                 return this.MemberwiseClone();
             }
             //深拷貝
             public object DeepClone()
             {
                 Person newP = new Person();
                 newP.PName = this._PName;
                 newP.pSex = this.pSex;
                 return newP;
             }

         }

         static void Main(string[] args)
         {
             Console.WriteLine("原對象:");
             Person p = new Person();
             p.PName = "JackLee";
             p.pSex = "男";

             p.ShowPersonInfo();

 
             //淺拷貝       
             Person copy = (Person)p.Clone();
             //深拷貝
             Person dcopy = (Person)p.DeepClone();

 
             Console.WriteLine("修改后的原對象:");
             p.PName = "JackZhao";
             p.pSex = "女";
             p.aa = 1111;
             p.ShowPersonInfo();

 
             Console.WriteLine("修改后的淺拷貝對象:");
             copy.ShowPersonInfo();
             Console.WriteLine("修改后的深拷貝對象:");
             dcopy.ShowPersonInfo();

             Console.WriteLine("直接拷貝對象:");
             Person PP = p;
             PP.ShowPersonInfo();

             Console.ReadLine();

 
         }

     }
 }

好了,關于深拷貝與淺拷貝就說到這里,項目還沒完事,先抓緊了。代碼可以直接復制到項目中運行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品视频综合 | 日韩精品一区二区三区老鸭窝 | 国产在线精品成人免费怡红院 | 九九热在线视频 | 久久88| 看毛片网站 | 国产一区免费在线观看 | 影音先锋中文字幕在线 | 一级色网站| 99精品视频免费在线观看 | 成人免费淫片aa视频免费 | 欧美一区二区在线视频 | 一个人看的www日本高清视频 | 国产第6页 | 亚洲欧美激情精品一区二区 | 日韩高清一区二区 | 婷婷色综合 | 色国产一区| 蜜桃久久av| 国产一区| 亚洲国产精品久久久久 | 97成人超碰 | 热久久久 | 在线视频这里只有精品 | 一级毛片免费播放 | 国产精品视频不卡 | 狠狠躁夜夜躁人人爽天天高潮 | 人人干人人干人人 | 国产视频网| 欧美一区永久视频免费观看 | 美女扒开内裤让男人桶 | 国产无毛 | 久久免费精品 | 日日干天天操 | 欧美国产精品一区 | 日韩欧美一区二区三区久久婷婷 | 日韩欧美一区二区在线 | 午夜精品久久久久久久久 | 欧美不卡激情三级在线观看 | 午夜看片| 亚洲国产视频一区 |