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

C#解決引用類型的深度克隆問題

 更新時(shí)間:2024年08月09日 11:22:45   作者:c#上位機(jī)  
本文將給大家介紹如何讓引用類型的對(duì)象復(fù)制以后各自擁有獨(dú)立的內(nèi)存從而實(shí)現(xiàn)一個(gè)對(duì)象值的變化不會(huì)影響別的對(duì)象,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下

前言

在C#中我們new一個(gè)引用類型的對(duì)象稱為對(duì)象1,如果我們?cè)俅蝞ew一個(gè)引用類型的對(duì)象稱為對(duì)象2,如果直接將第一個(gè)對(duì)象直接賦值給第二個(gè)對(duì)象,然后如果我們這時(shí)候改變對(duì)象2的值,你會(huì)發(fā)現(xiàn)對(duì)象1的值也會(huì)被更改,這就是引用類型的淺克隆,因?yàn)橐妙愋偷膹?fù)制本質(zhì)上并沒有開辟新的內(nèi)存,兩個(gè)對(duì)象都是指向同一個(gè)內(nèi)存,所以改變其中一個(gè)對(duì)象,另一個(gè)對(duì)象的值也會(huì)被改變。本文就來介紹如何讓引用類型的對(duì)象復(fù)制以后各自擁有獨(dú)立的內(nèi)存從而實(shí)現(xiàn)一個(gè)對(duì)象值的變化不會(huì)影響別的對(duì)象。

1、C#的淺克隆舉例

我們首先定義一個(gè)類稱為TestClone,這個(gè)類有一個(gè)成員變量a。

 class  TestClone
    {
        public int a = 0;
    }

第一步、 然后我們new一個(gè)TestClone類的對(duì)象稱為testClone1 ,然后將它的成員a賦值為10;
第二步、 接著我們?cè)俅蝞ew一個(gè)TestClone類的對(duì)象稱為testClone2,然后將testClone1 賦值給testClone2;
第三步、更改testClone2的成員a的值為100。
最后、輸出testClone1.a的值,值為100,我們會(huì)發(fā)現(xiàn)雖然我們沒有直接給testClone1.a賦值,但是由于TestClone是一個(gè)引用類型,所以testClone1 和testClone2都是指向了同一個(gè)內(nèi)存地址,所以我們更改testClone2的值,實(shí)際上也就是更改testClone1的值,這種對(duì)象的復(fù)制方式我們稱為淺克隆。

   //淺克隆
            TestClone testClone1 = new TestClone();
            testClone1.a = 10;

            TestClone testClone2 = new TestClone();
            testClone2 = testClone1;

            testClone2.a = 100;
            Console.WriteLine(testClone1.a );//輸出值為100

2、C#的深克隆舉例

我們發(fā)現(xiàn)淺克隆看起來復(fù)制了多個(gè)對(duì)象,實(shí)際上值并沒有被復(fù)制,所以這里我們介紹深克隆,深克隆的目的就是為同一個(gè)類的不同對(duì)象創(chuàng)建不同的內(nèi)存,這樣每個(gè)對(duì)象的值都是獨(dú)立的,更改一個(gè)對(duì)象的值不會(huì)影響別的對(duì)象的值。

在下面的代碼中我調(diào)用了一個(gè)第三方的類JsonConvert,這個(gè)類引用Newtonsoft.Json這個(gè)dll

第一步、首先new一個(gè)對(duì)象testClone3 ,并將它的成員a設(shè)置為10。
第二步、調(diào)用JsonConvert.SerializeObject方法將對(duì)象序列化一個(gè)字符串。
第三步、調(diào)用JsonConvert.DeserializeObject將字符串反序化為TestClone 類型的對(duì)象并賦值給testClone4
第四步、設(shè)置 testClone4.a = 100;
最后、輸出testClone3.a的值,該值為10,你會(huì)發(fā)現(xiàn)testClone3的值并沒有隨著testClone4的值改變而改變,這樣這兩個(gè)對(duì)象就是具備獨(dú)立的內(nèi)存了,實(shí)現(xiàn)了深克隆。

  //深克隆
            TestClone testClone3 = new TestClone();
            testClone3.a = 10;

            TestClone testClone4= JsonConvert.DeserializeObject<TestClone> (JsonConvert.SerializeObject(testClone3));
            testClone4.a = 100;
            Console.WriteLine(testClone3.a);//輸出值為10

到此這篇關(guān)于C#解決引用類型的“深度”克隆問題的文章就介紹到這了,更多相關(guān)C#深度”克隆問題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 如何設(shè)置label(標(biāo)簽)控件的背景顏色為透明

    C# 如何設(shè)置label(標(biāo)簽)控件的背景顏色為透明

    這篇文章主要介紹了C# 如何設(shè)置label(標(biāo)簽)控件的背景顏色為透明,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-10-10
  • C#使用InstallerProjects打包桌面應(yīng)用程序的完整步驟

    C#使用InstallerProjects打包桌面應(yīng)用程序的完整步驟

    這篇文章主要給大家介紹了關(guān)于C#使用InstallerProjects打包桌面應(yīng)用程序的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • C# 開發(fā)圓角控件(窗體)的具體實(shí)現(xiàn)

    C# 開發(fā)圓角控件(窗體)的具體實(shí)現(xiàn)

    這篇文章主要介紹了C# 開發(fā)圓角控件的具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-02-02
  • C# 6.0 內(nèi)插字符串(Interpolated Strings )的使用方法

    C# 6.0 內(nèi)插字符串(Interpolated Strings )的使用方法

    這篇文章主要為大家詳細(xì)介紹了C# 6.0 內(nèi)插字符串的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C#中使用IFormattable實(shí)現(xiàn)自定義格式化字符串輸出示例

    C#中使用IFormattable實(shí)現(xiàn)自定義格式化字符串輸出示例

    這篇文章主要介紹了C#中使用IFormattable實(shí)現(xiàn)自定義格式字符串輸出示例,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-06-06
  • C#使用struct直接轉(zhuǎn)換下位機(jī)數(shù)據(jù)的示例代碼

    C#使用struct直接轉(zhuǎn)換下位機(jī)數(shù)據(jù)的示例代碼

    這篇文章主要介紹了C#使用struct直接轉(zhuǎn)換下位機(jī)數(shù)據(jù)的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • C#在PDF中繪制不同風(fēng)格類型的文本方法實(shí)例

    C#在PDF中繪制不同風(fēng)格類型的文本方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于C#在PDF中繪制不同風(fēng)格類型的文本的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • C#如何自動(dòng)識(shí)別文件的編碼

    C#如何自動(dòng)識(shí)別文件的編碼

    相信每位程序員在日常學(xué)習(xí)工作中,文件編碼識(shí)別是必不可少的,一旦編碼錯(cuò)誤就會(huì)出現(xiàn)讓人頭疼的亂碼,那么下面這篇文章將給大家介紹如何通過C#來自動(dòng)識(shí)別文件的編碼。文中給出了詳細(xì)的示例代碼,對(duì)大家的理解很有幫助,下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • C# CSV文件讀寫的實(shí)現(xiàn)

    C# CSV文件讀寫的實(shí)現(xiàn)

    本文主要介紹了C# CSV文件讀寫的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果

    C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)會(huì)移動(dòng)的文字效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04

最新評(píng)論