国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C# 使用反射來實現對象的深度復制方法

2020-05-23 13:56:26
字體:
來源:轉載
供稿:網友

實現方式

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

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

所以使用反射機制來實現。
 
但是如果是服務端運行的話,還是建議手動的實現。

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

代碼:

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# 使用反射來實現對象的深度復制方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兴市| 聂荣县| 德令哈市| 应用必备| 双柏县| 怀柔区| 策勒县| 万安县| 怀集县| 宝兴县| 蓬莱市| 迁安市| 柘城县| 紫金县| 万山特区| 无棣县| 波密县| 宁强县| 西藏| 色达县| 和政县| 互助| 鄯善县| 钟山县| 台州市| 武川县| 陆丰市| 寿光市| 大名县| 五指山市| 江西省| 南昌县| 舞钢市| 临桂县| 曲松县| 平乐县| 灌南县| 安龙县| 土默特右旗| 南川市| 巩义市|