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

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

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

前言

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

1、C#的淺克隆舉例

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

 class  TestClone
    {
        public int a = 0;
    }

第一步、 然后我們new一個TestClone類的對象稱為testClone1 ,然后將它的成員a賦值為10;
第二步、 接著我們再次new一個TestClone類的對象稱為testClone2,然后將testClone1 賦值給testClone2;
第三步、更改testClone2的成員a的值為100。
最后、輸出testClone1.a的值,值為100,我們會發(fā)現(xiàn)雖然我們沒有直接給testClone1.a賦值,但是由于TestClone是一個引用類型,所以testClone1 和testClone2都是指向了同一個內(nèi)存地址,所以我們更改testClone2的值,實際上也就是更改testClone1的值,這種對象的復(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ù)制了多個對象,實際上值并沒有被復(fù)制,所以這里我們介紹深克隆,深克隆的目的就是為同一個類的不同對象創(chuàng)建不同的內(nèi)存,這樣每個對象的值都是獨立的,更改一個對象的值不會影響別的對象的值。

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

第一步、首先new一個對象testClone3 ,并將它的成員a設(shè)置為10。
第二步、調(diào)用JsonConvert.SerializeObject方法將對象序列化一個字符串。
第三步、調(diào)用JsonConvert.DeserializeObject將字符串反序化為TestClone 類型的對象并賦值給testClone4
第四步、設(shè)置 testClone4.a = 100;
最后、輸出testClone3.a的值,該值為10,你會發(fā)現(xiàn)testClone3的值并沒有隨著testClone4的值改變而改變,這樣這兩個對象就是具備獨立的內(nèi)存了,實現(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 字符串string和內(nèi)存流MemoryStream及比特數(shù)組byte[]之間相互轉(zhuǎn)換

    C# 字符串string和內(nèi)存流MemoryStream及比特數(shù)組byte[]之間相互轉(zhuǎn)換

    本文主要介紹字符串string和內(nèi)存流MemoryStream及比特數(shù)組byte[]之間相互轉(zhuǎn)換的方法,需要的小伙伴可以參考一下。
    2016-05-05
  • C#異步編程ConfigureAwait的使用小結(jié)

    C#異步編程ConfigureAwait的使用小結(jié)

    本文介紹了異步編程在GUI和服務(wù)器端應(yīng)用的優(yōu)勢,詳細的介紹了async和await的關(guān)鍵作用,通過實例解析了在UI線程正確使用await.ConfigureAwait,及創(chuàng)建Task的不同方法,感興趣的可以了解一下
    2025-08-08
  • 分析C# Dictionary的實現(xiàn)原理

    分析C# Dictionary的實現(xiàn)原理

    對于C#中的Dictionary類相信大家都不陌生,這是一個Collection(集合)類型,可以通過Key/Value(鍵值對的形式來存放數(shù)據(jù);該類最大的優(yōu)點就是它查找元素的時間復(fù)雜度接近O(1)。那么什么樣的設(shè)計能使得Dictionary類實現(xiàn)O(1)的時間復(fù)雜度呢
    2021-06-06
  • c# winform多線程死循環(huán)踩坑

    c# winform多線程死循環(huán)踩坑

    本文主要介紹了c# winform多線程死循環(huán)踩坑,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • C#讀取寫入文件的3種方式示例代碼

    C#讀取寫入文件的3種方式示例代碼

    最近操作文件頻繁,所以這篇文章主要給大家介紹了關(guān)于C#讀取寫入文件的3種方式,文中通過實例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-06-06
  • Unity UGUI實現(xiàn)簡單拖拽圖片功能

    Unity UGUI實現(xiàn)簡單拖拽圖片功能

    這篇文章主要為大家詳細介紹了Unity UGUI實現(xiàn)簡單拖拽圖片功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C#編寫的Base64加密和解密類

    C#編寫的Base64加密和解密類

    本文給大家匯總介紹了幾種C#編寫的Base64加密和解密類的代碼,從簡單到復(fù)雜,都能夠?qū)崿F(xiàn)功能,有需要的小伙伴根據(jù)自己的項目需求參考下吧。
    2015-05-05
  • unity 鼠標(biāo)懸停事件操作

    unity 鼠標(biāo)懸停事件操作

    這篇文章主要介紹了unity 鼠標(biāo)懸停事件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 如何在C# 中查找或結(jié)束程序域中的主、子進程

    如何在C# 中查找或結(jié)束程序域中的主、子進程

    這篇文章主要介紹了如何在C# 中查找或結(jié)束程序域中的主、子進程,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下
    2020-11-11
  • C# 忽略大小寫進行字符串比較

    C# 忽略大小寫進行字符串比較

    這篇文章主要介紹了C# 字符串比較忽略大小寫的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02

最新評論

皋兰县| 巩义市| 弥渡县| 寿阳县| 霍山县| 满城县| 招远市| 江西省| 上思县| 三台县| 沙坪坝区| 富平县| 龙里县| 大方县| 河北省| 万荣县| 迁安市| 商南县| 普格县| 桂林市| 临清市| 阿拉善左旗| 洛阳市| 凤城市| 平乡县| 正宁县| 镇安县| 汉阴县| 荣成市| 阳高县| 隆安县| 灯塔市| 达孜县| 普兰店市| 朝阳区| 延川县| 额济纳旗| 兴业县| 霍林郭勒市| 天津市| 宜阳县|