您是第 Web Page Tracking 位访客

水~墨~

昂首阔步,不留一点遗憾!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

通过序列化来执行深度复制,将对象序列化成二进制流,然后通过二进制反序列化给 某个新对象。这样就达到了深度复制的目的。

二进制序列化可以让对象保真(只要类加上[Serializable],不管私有成员还是共有成员  全部序列化),而另外普通的XML 序列化 则不能保真(因为不对private序列化)

另: MSDN 上所述的  类继承Icloneable  实现clone() 方法也可以,如果一个成员是A对象,A对象里又有B对象成员,那么非常繁琐。

所以尽量使用  序列化来完成。

[Serializable]
public  class deepcopy
  {
      public static T DeepClone<T>(T obj)
      {
          using (var ms = new MemoryStream())
          {
              var formatter = new BinaryFormatter();
              formatter.Serialize(ms, obj);
              ms.Position = 0;

              return (T)formatter.Deserialize(ms);
          }
      }
  }

posted on 2012-08-06 23:20  水墨.MR.H  阅读(232)  评论(0编辑  收藏  举报
知识共享许可协议
本博客为水墨原创,基于Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的水墨(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。