• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C# 使用反射来实现对象的深度复制方法

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#反射创建对象,c#面向对象,c#面向对象程序设计,c#类与对象,c#对象池等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

实现方式

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

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

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

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

代码:

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;
   }
 }
</div>

以上这篇C# 使用反射来实现对象的深度复制方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28用c语言实现HUP信号重启进程的方法
  • 2017-05-28如何在C++中实现按位存取
  • 2017-05-28详解C语言中的#define宏定义命令用法
  • 2017-05-28基于C++ cin、cin.get()、cin.getline()、getline()、gets()函数的使用详解
  • 2017-05-28判断本机office安装版本的方法分享
  • 2017-05-28C++中的extern声明变量详解
  • 2017-05-28C语言内存对齐实例详解
  • 2017-05-28c++中string类成员函数c_str()的用法
  • 2017-05-28c++版线程池和任务池示例
  • 2017-05-28详解C语言的结构体中成员变量偏移问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入解析C++编程中类的封装特性
    • C++中 STL list详解及简单实例
    • visual studio 2015下boost库配置教程
    • c语言中getch,getche,getchar的区别
    • 文件编译时出现multiple definition of 'xxxxxx'的具体解决方法
    • C++交换指针实例
    • C++基础入门教程(三):数组、字符串、结构体、共用体
    • C语言 位运算详解及示例代码
    • VC程序设计中CreateProcess用法注意事项
    • c++实现加载so动态库中的资源

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有