亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

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

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

下面通過實例可以清楚看到淺拷貝與深拷貝的區(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("原對象:");
             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();

 
         }

     }
 }

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

相關(guān)文章

  • WinForm中的登錄實現(xiàn)

    WinForm中的登錄實現(xiàn)

    在一般的C/S系統(tǒng)中,登錄功能基本上是必備功能,總結(jié)了三種C# Winform登錄功能的實現(xiàn)方法
    2012-11-11
  • C#的XML兩種代碼注釋實例說明

    C#的XML兩種代碼注釋實例說明

    在C/C++,JAVA中,有兩種注釋,一種是單行注釋,即兩根反斜杠(//),另一種是多行注釋,即以/*開頭,以*/結(jié)尾,本文將詳細(xì)介紹,需要的朋友可以參考下
    2012-12-12
  • 關(guān)于System.Convert的那些事兒

    關(guān)于System.Convert的那些事兒

    本篇文章是對System.Convert的那些事兒,進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Unity3D Shader實現(xiàn)動態(tài)屏幕遮罩

    Unity3D Shader實現(xiàn)動態(tài)屏幕遮罩

    這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實現(xiàn)動態(tài)屏幕遮罩效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Windows窗體的.Net框架繪圖技術(shù)實現(xiàn)方法

    Windows窗體的.Net框架繪圖技術(shù)實現(xiàn)方法

    這篇文章主要介紹了Windows窗體的.Net框架繪圖技術(shù)實現(xiàn)方法,非常實用,需要的朋友可以參考下
    2014-08-08
  • C#異步調(diào)用的好處和方法分享

    C#異步調(diào)用的好處和方法分享

    我們要明確,為什么要進(jìn)行異步回調(diào)?眾所周知,普通方法運行,是單線程的,如果中途有大型操作(如:讀取大文件,大批量操作數(shù)據(jù)庫,網(wǎng)絡(luò)傳輸?shù)龋?,都會?dǎo)致方法阻塞,表現(xiàn)在界面上就是,程序卡或者死掉,界面元素不動了,不響應(yīng)了
    2012-04-04
  • C#-WinForm跨線程修改UI界面的示例

    C#-WinForm跨線程修改UI界面的示例

    這篇文章主要介紹了C#-WinForm跨線程修改UI界面的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • c# 獲取已安裝的打印機(jī)并調(diào)用打印文件

    c# 獲取已安裝的打印機(jī)并調(diào)用打印文件

    這篇文章主要介紹了c#如何獲取已安裝的打印機(jī)并調(diào)用打印文件,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • C#將dll打包到程序中的具體實現(xiàn)

    C#將dll打包到程序中的具體實現(xiàn)

    這篇文章介紹了C#將dll打包到程序中的具體實現(xiàn),有需要的朋友可以參考一下
    2013-10-10
  • C#中的時間顯示格式(12小時制VS24小時制)

    C#中的時間顯示格式(12小時制VS24小時制)

    這篇文章主要介紹了C#中的時間顯示格式(12小時制VS24小時制),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01

最新評論