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

C# 使用反射來實(shí)現(xiàn)對(duì)象的深度復(fù)制方法

 更新時(shí)間:2017年01月18日 11:12:10   投稿:jingxian  
下面小編就為大家?guī)硪黄狢# 使用反射來實(shí)現(xiàn)對(duì)象的深度復(fù)制方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

實(shí)現(xiàn)方式

通過挨個(gè)羅列的方式一次復(fù)制子對(duì)象是非常耗費(fèi)人力的,如果子對(duì)象是引用類型,則還要需要考慮是否對(duì)子對(duì)象進(jìn)一步深拷貝。

實(shí)際應(yīng)用中,一個(gè)類如果有幾十個(gè)子對(duì)象,挨個(gè)復(fù)制對(duì)于開發(fā)人員來說索然無味比較費(fèi)時(shí)費(fèi)力。

所以使用反射機(jī)制來實(shí)現(xiàn)。
 
但是如果是服務(wù)端運(yùn)行的話,還是建議手動(dòng)的實(shí)現(xiàn)。

畢竟反射機(jī)制比直接寫出來的效率要慢一些。

代碼:

public static class DeepCopyHelper
  {
 
   public static object Copy(this object obj)
   {
     Object targetDeepCopyObj;
     Type targetType = obj.GetType();
     //值類型
     if (targetType.IsValueType == true)
     {
       targetDeepCopyObj = obj;
     }
     //引用類型 
     else
     {
       targetDeepCopyObj = System.Activator.CreateInstance(targetType);  //創(chuàng)建引用對(duì)象 
       System.Reflection.MemberInfo[] memberCollection = obj.GetType().GetMembers();
 
       foreach (System.Reflection.MemberInfo member in memberCollection)
       {
         if (member.MemberType == System.Reflection.MemberTypes.Field)
         {
           System.Reflection.FieldInfo field = (System.Reflection.FieldInfo)member;
           Object fieldValue = field.GetValue(obj);
           if (fieldValue is ICloneable)
           {
             field.SetValue(targetDeepCopyObj, (fieldValue as ICloneable).Clone());
           }
           else
           {
             field.SetValue(targetDeepCopyObj, Copy(fieldValue));
           }
 
         }
         else if (member.MemberType == System.Reflection.MemberTypes.Property)
         {
           System.Reflection.PropertyInfo myProperty = (System.Reflection.PropertyInfo)member;
           MethodInfo info = myProperty.GetSetMethod(false);
           if (info != null)
           {
             object propertyValue = myProperty.GetValue(obj, null);
             if (propertyValue is ICloneable)
             {
               myProperty.SetValue(targetDeepCopyObj, (propertyValue as ICloneable).Clone(), null);
             }
             else
             {
               myProperty.SetValue(targetDeepCopyObj, Copy(propertyValue), null);
             }
           }
 
         }
       }
     }
     return targetDeepCopyObj;
   }
 }

以上這篇C# 使用反射來實(shí)現(xiàn)對(duì)象的深度復(fù)制方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++事件處理中的__hook與__unhook用法詳解

    C++事件處理中的__hook與__unhook用法詳解

    這篇文章主要介紹了C++事件處理中__hook與__unhook的用法,C++中的COM類主要支持事件處理,需要的朋友可以參考下
    2016-01-01
  • Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)

    Qt數(shù)據(jù)庫相關(guān)應(yīng)用開發(fā)總結(jié)

    這篇文章主要為大家介紹了在Qt數(shù)據(jù)庫應(yīng)用開發(fā)中的一些經(jīng)驗(yàn)總結(jié),以及一些組件的使用介紹。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • C++20中的結(jié)構(gòu)化綁定類型示例詳解

    C++20中的結(jié)構(gòu)化綁定類型示例詳解

    這篇文章主要為大家介紹了C++20中的結(jié)構(gòu)化綁定類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • C/C++中的回調(diào)用法詳細(xì)講解

    C/C++中的回調(diào)用法詳細(xì)講解

    這篇文章主要介紹了回調(diào)函數(shù)在C/C++中的重要意義及應(yīng)用,回調(diào)函數(shù)通過將函數(shù)作為參數(shù)傳遞,實(shí)現(xiàn)了模塊的解耦、靈活性和可擴(kuò)展性,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 基于C語言實(shí)現(xiàn)掃雷小游戲

    基于C語言實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++實(shí)現(xiàn)廣度優(yōu)先遍歷圖

    C++實(shí)現(xiàn)廣度優(yōu)先遍歷圖

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)廣度優(yōu)先遍歷圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • QT5.12.5移植到ARM平臺(tái)下的方法步驟

    QT5.12.5移植到ARM平臺(tái)下的方法步驟

    本文主要介紹了QT5.12.5移植到ARM平臺(tái)下的方法步驟,包括修改配置文件、代碼修改以及測(cè)試運(yùn)行,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 基于Qt實(shí)現(xiàn)圖片播放器的示例代碼

    基于Qt實(shí)現(xiàn)圖片播放器的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用qt制作了一個(gè)簡(jiǎn)單的圖片播放器,可以播放gif、png等格式圖片。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-12-12
  • C語言實(shí)現(xiàn)BMP圖像開運(yùn)算處理

    C語言實(shí)現(xiàn)BMP圖像開運(yùn)算處理

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)BMP圖像開運(yùn)算處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 貪吃蛇游戲C++命令行版實(shí)例代碼

    貪吃蛇游戲C++命令行版實(shí)例代碼

    這篇文章主要介紹了貪吃蛇游戲C++命令行版實(shí)例代碼,包含了常見的循環(huán)語句及相關(guān)游戲規(guī)則的判定方法,有助于更好的理解游戲設(shè)計(jì)原理,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

镇远县| 汉川市| 什邡市| 来凤县| 东源县| 绿春县| 大厂| 佛坪县| 西宁市| 成武县| 板桥市| 湄潭县| 大田县| 鄄城县| 台南市| 襄汾县| 云梦县| 阳春市| 泸水县| 青海省| 简阳市| 文山县| 普宁市| 安仁县| 禹城市| 兰西县| 句容市| 岫岩| 罗城| 宿迁市| 永吉县| 保德县| 崇礼县| 恩平市| 阳曲县| 刚察县| 桂平市| 鱼台县| 科技| 绥江县| 旌德县|