国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 越西县| 读书| 满洲里市| 上杭县| 诸暨市| 石嘴山市| 通辽市| 高平市| 白水县| 隆子县| 恭城| 新沂市| 崇阳县| 博爱县| 稷山县| 保康县| 泌阳县| 古交市| 木兰县| 敦化市| 康马县| 连南| 怀安县| 金堂县| 新巴尔虎左旗| 连江县| 唐河县| 裕民县| 新民市| 永登县| 韶山市| 巴里| 乐清市| 靖西县| 东山县| 荔浦县| 临夏市| 南昌县| 广水市| 静安区| 郁南县|