欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

實現(xiàn)方式

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

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

所以使用反射機(jī)制來實現(xiàn)。
 
但是如果是服務(wù)端運(yùn)行的話,還是建議手動的實現(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)建引用對象 
       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# 使用反射來實現(xiàn)對象的深度復(fù)制方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言實現(xiàn)雙向鏈表

    C語言實現(xiàn)雙向鏈表

    本文給大家分享的是一段使用C語言實現(xiàn)雙向鏈表的代碼,完全是根據(jù)自己的理解和認(rèn)識來編寫的,希望大家能夠喜歡,文章的最后附上了一個網(wǎng)友寫的對于雙向鏈表刪除節(jié)點(diǎn)、插入節(jié)點(diǎn)、雙向輸出等操作的代碼,也非常不錯,推薦給大家
    2015-03-03
  • C語言中隊列的結(jié)構(gòu)和函數(shù)接口的使用示例

    C語言中隊列的結(jié)構(gòu)和函數(shù)接口的使用示例

    隊列只允許一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表,隊列具有先進(jìn)先出FIFO的性質(zhì);隊列可用數(shù)組和鏈表 的方法實現(xiàn),使用鏈表的結(jié)構(gòu)實現(xiàn)更優(yōu)一些,因為如果使用數(shù)組節(jié),出隊列時刪去首元素需要將整個數(shù)組前移,效率比較低
    2023-02-02
  • C++二分查找算法實例

    C++二分查找算法實例

    這篇文章主要為大家詳細(xì)介紹了C++二分查找算法的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C程序和C++程序之間的互相調(diào)用圖文教程

    C程序和C++程序之間的互相調(diào)用圖文教程

    這篇文章主要給大家介紹了關(guān)于C程序和C++程序之間互相調(diào)用的相關(guān)資料,我們平常在刷題的時候,難免遇到實現(xiàn)多組輸入這樣的問題,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)之 折半查找實例詳解

    C語言數(shù)據(jù)結(jié)構(gòu)之 折半查找實例詳解

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之 折半查找實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++實現(xiàn)順序表的方法

    C++實現(xiàn)順序表的方法

    本文給大家?guī)砹薈++實現(xiàn)順序表的方法,代碼簡單易懂,附有注釋,感興趣的朋友一起看下吧
    2016-08-08
  • C語言零基礎(chǔ)徹底掌握預(yù)處理上篇

    C語言零基礎(chǔ)徹底掌握預(yù)處理上篇

    在C語言的程序中包括各種以符號#開頭的編譯指令,這些指令稱為預(yù)處理命令。預(yù)處理命令屬于C語言編譯器,而不是C語言的組成部分,通過預(yù)處理命令可擴(kuò)展C語言程序設(shè)計的環(huán)境
    2022-08-08
  • C++實現(xiàn)停車場管理系統(tǒng)

    C++實現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C/C++中指針和引用之相關(guān)問題深入研究

    C/C++中指針和引用之相關(guān)問題深入研究

    從內(nèi)存分配上看,程序為指針變量分配內(nèi)存區(qū)域,而不為引用分配內(nèi)存區(qū)域,因為引用聲明時必須初始化,從而指向一個已經(jīng)存在的對象。引用不能指向空值
    2013-10-10
  • 如何利用tinyxml操縱xml及注意問題

    如何利用tinyxml操縱xml及注意問題

    這篇博客,我們詳細(xì)講述如何利用tinyxml操縱xml。以及在操作的過程中,我們應(yīng)該注意的問題
    2013-01-01

最新評論