栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C# 使用反射来实现对象的深度复制方法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# 使用反射来实现对象的深度复制方法

实现方式

通过挨个罗列的方式一次复制子对象是非常耗费人力的,如果子对象是引用类型,则还要需要考虑是否对子对象进一步深拷贝。

实际应用中,一个类如果有几十个子对象,挨个复制对于开发人员来说索然无味比较费时费力。

所以使用反射机制来实现。
 
但是如果是服务端运行的话,还是建议手动的实现。

毕竟反射机制比直接写出来的效率要慢一些。

代码:

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);  //创建引用对象 
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# 使用反射来实现对象的深度复制方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/63868.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号