最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# 深拷貝與淺拷貝的區(qū)別分析及實(shí)例

 更新時(shí)間:2013年03月22日 14:48:06   作者:  
淺拷貝(影子克隆):只復(fù)制對(duì)象的基本類型,對(duì)象類型,仍屬于原來(lái)的引用. 深拷貝(深度克隆):不緊復(fù)制對(duì)象的基本類,同時(shí)也復(fù)制原對(duì)象中的對(duì)象.就是說(shuō)完全是新對(duì)象產(chǎn)生的.

      深拷貝是指源對(duì)象與拷貝對(duì)象互相獨(dú)立,其中任何一個(gè)對(duì)象的改動(dòng)都不會(huì)對(duì)另外一個(gè)對(duì)象造成影響。舉個(gè)例子,一個(gè)人名叫張三,后來(lái)用他克?。僭O(shè)法律允許)了另外一個(gè)人,叫李四,不管是張三缺胳膊少腿還是李四缺胳膊少腿都不會(huì)影響另外一個(gè)人。比較典型的就是Value(值)對(duì)象,如預(yù)定義類型Int32,Double,以及結(jié)構(gòu)(struct),枚舉(Enum)等。

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

      C#中有兩種類型變量,一種 是值類型變量,一種是引用類型變量。對(duì)于前者,copy是屬于全盤(pán)復(fù)制;而對(duì)于后者,一般的copy只是淺copy,相當(dāng)于只傳遞一個(gè)引用指針一樣。因此 對(duì)于后者進(jìn)行真正copy的時(shí)候,也是最費(fèi)事的,具體的說(shuō),必須為其實(shí)現(xiàn)ICloneable接口中提供的Clone方法。

看看定義:
      淺拷貝(影子克隆):只復(fù)制對(duì)象的基本類型,對(duì)象類型,仍屬于原來(lái)的引用.
      深拷貝(深度克隆):不緊復(fù)制對(duì)象的基本類,同時(shí)也復(fù)制原對(duì)象中的對(duì)象.就是說(shuō)完全是新對(duì)象產(chǎn)生的.

淺拷貝和深拷貝的區(qū)別
      淺拷貝是指將對(duì)象中的數(shù)值類型的字段拷貝到新的對(duì)象中,而對(duì)象中的引用型字段則指復(fù)制它的一個(gè)引用到目標(biāo)對(duì)象。如果改變目標(biāo)對(duì)象 中引用型字段的值他將反映在原是對(duì)象中,也就是說(shuō)原始對(duì)象中對(duì)應(yīng)的字段也會(huì)發(fā)生變化。深拷貝與淺拷貝不同的是對(duì)于引用的處理,深拷貝將會(huì)在新對(duì)象中創(chuàng)建一 個(gè)新的和原是對(duì)象中對(duì)應(yīng)字段相同(內(nèi)容相同)的字段,也就是說(shuō)這個(gè)引用和原是對(duì)象的引用是不同的,我們?cè)诟淖冃聦?duì)象中的這個(gè)字段的時(shí)候是不會(huì)影響到原始對(duì) 象中對(duì)應(yīng)字段的內(nèi)容。所以對(duì)于原型模式也有不同的兩種處理方法:對(duì)象的淺拷貝和深拷貝。

下面通過(guò)實(shí)例可以清楚看到淺拷貝與深拷貝的區(qū)別,代碼如下:

復(fù)制代碼 代碼如下:

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("原對(duì)象:");
             Person p = new Person();
             p.PName = "JackLee";
             p.pSex = "男";

             p.ShowPersonInfo();

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

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

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

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

             Console.ReadLine();

 
         }

     }
 }

好了,關(guān)于深拷貝與淺拷貝就說(shuō)到這里,項(xiàng)目還沒(méi)完事,先抓緊了。代碼可以直接復(fù)制到項(xiàng)目中運(yùn)行。

相關(guān)文章

  • C#實(shí)現(xiàn)輕松從HTML中提取純文本

    C#實(shí)現(xiàn)輕松從HTML中提取純文本

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)輕松從HTML中提取純文本,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C#使用NPOI上傳excel

    C#使用NPOI上傳excel

    這篇文章主要為大家詳細(xì)介紹了C#使用NPOI上傳excel的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C#實(shí)現(xiàn)基于Base64的加密解密類實(shí)例

    C#實(shí)現(xiàn)基于Base64的加密解密類實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)基于Base64的加密解密類,實(shí)例分析了C#基于Base64的加密解密實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#中生成DLL及其事件的處理

    C#中生成DLL及其事件的處理

    在C#中,創(chuàng)建動(dòng)態(tài)鏈接庫(kù)是一個(gè)常見(jiàn)的任務(wù),本文主要介紹了C#中生成DLL及其事件的處理,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • C#控制臺(tái)程序?qū)崿F(xiàn)開(kāi)啟、關(guān)閉SQLServer服務(wù)的代碼分享

    C#控制臺(tái)程序?qū)崿F(xiàn)開(kāi)啟、關(guān)閉SQLServer服務(wù)的代碼分享

    這篇文章主要介紹了C#控制臺(tái)程序?qū)崿F(xiàn)開(kāi)啟、關(guān)閉SQLServer服務(wù)的代碼分享,需要的朋友可以參考下
    2014-05-05
  • C#串口編程實(shí)例代碼

    C#串口編程實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了C#串口編程實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • ZooKeeper 實(shí)現(xiàn)分布式鎖的方法示例

    ZooKeeper 實(shí)現(xiàn)分布式鎖的方法示例

    這篇文章主要介紹了ZooKeeper 實(shí)現(xiàn)分布式鎖的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 再議C#中的裝箱與拆箱的問(wèn)題詳解

    再議C#中的裝箱與拆箱的問(wèn)題詳解

    本篇文章再次介紹了C#中的裝箱與拆箱,這次們看下使用泛型和不使用泛型引發(fā)裝箱拆箱的情況
    2013-05-05
  • C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題

    C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題

    這篇文章主要介紹了C# 多線程中經(jīng)常訪問(wèn)同一資源可能造成哪些問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • C#多線程數(shù)組模擬socket

    C#多線程數(shù)組模擬socket

    這篇文章主要為大家詳細(xì)介紹了C#多線程數(shù)組模擬socket的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評(píng)論

射洪县| 大厂| 定日县| 安阳市| 阿巴嘎旗| 内江市| 富锦市| 昭苏县| 远安县| 抚州市| 射洪县| 道真| 和平区| 灵山县| 平乡县| 固原市| 民和| 汽车| 遵化市| 桦川县| 新巴尔虎右旗| 平昌县| 安仁县| 万载县| 二连浩特市| 县级市| 仁怀市| 海阳市| 元氏县| 皋兰县| 章丘市| 合肥市| 阿坝| 巨野县| 锡林郭勒盟| 岱山县| 泰宁县| 宽城| 蒙城县| 门源| 岳西县|