[转载]C#深拷贝的方法

 首先了解下深拷贝和浅拷贝的定义:

      浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.
      深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的. 
      在C#中,复制一个基本类型,是全盘复制的。而对于引用类型,只是复制一个引用指针。所以在对其进行深拷贝也是比较麻烦的,要实现ICloneable接口的Clone方法。
      当然也有其他比较快的方法,下面这个是在网上找到的代码。只需要将一个对象序列化为binary stream,然后再将它反序列化为新的对象,就能实现深拷贝。代码如下:

 1 public static T CloneOf<T>(T serializableObject)
 2       {
 3           object objCopy = null;
 4 
 5           MemoryStream stream = new MemoryStream();
 6           BinaryFormatter binFormatter = new BinaryFormatter();
 7           binFormatter.Serialize(stream, serializableObject);
 8           stream.Position = 0;
 9           objCopy = (T) binFormatter.Deserialize(stream);
10           stream.Close();
11           return (T) objCopy;
12 
13         }

      浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.
      深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的. 
      在C#中,复制一个基本类型,是全盘复制的。而对于引用类型,只是复制一个引用指针。所以在对其进行深拷贝也是比较麻烦的,要实现ICloneable接口的Clone方法。
      当然也有其他比较快的方法,下面这个是在网上找到的代码。只需要将一个对象序列化为binary stream,然后再将它反序列化为新的对象,就能实现深拷贝。代码如下:

 1 public static T CloneOf<T>(T serializableObject)
 2       {
 3           object objCopy = null;
 4 
 5           MemoryStream stream = new MemoryStream();
 6           BinaryFormatter binFormatter = new BinaryFormatter();
 7           binFormatter.Serialize(stream, serializableObject);
 8           stream.Position = 0;
 9           objCopy = (T) binFormatter.Deserialize(stream);
10           stream.Close();
11           return (T) objCopy;
12 
13         }