利用序列化和反序列化实现深拷贝

假如说有一个简单的类,只有2个属性,那么可以用比较简单的方法实现深拷贝。
[Serializable]
public class Person
{
    
public int Height { getset; }
    
public string FirstName { getset; }
}
 
class Program {
    
static void Main(string[] args) {
        
//实例化一个对象
        Person PersonOne = new Person();
        PersonOne.FirstName 
= "John";
        PersonOne.Height 
= 1;
        
//深拷贝
        Person DeepCopyPerson = new Person();
        DeepCopyPerson.FirstName 
= PersonOne.FirstName;
        DeepCopyPerson.Height 
= PersonOne.Height;
    }
}

代码中的DeepCopyPerson对象就是对PersonOne对象的一个深拷贝。其实还可以用序列化和反序列化的方法来实现对对象的深拷贝。Person类的[Serializable]属性是为了下面介绍序列化反序列化方法做深拷贝而做的准备,在这里没什么特别含义。

 

public static T DeepCopy<t>(T obj)
{
    
object retval;
    
using (MemoryStream ms = new MemoryStream())
    {
        BinaryFormatter bf 
= new BinaryFormatter();
        
//序列化成流
        bf.Serialize(ms, obj);
        ms.Seek(
0, SeekOrigin.Begin);
        
//反序列化成对象
        retval = bf.Deserialize(ms);
        ms.Close();
    }
    
return (T)retval;
}

用的时候就是:

 

class Program {
    
static void Main(string[] args) {
        
//实例化一个对象
        Person PersonOne = new Person();
        PersonOne.FirstName 
= "John";
        PersonOne.Height 
= 1;
        
//深拷贝
        Person DeepCopyPerson = DeepCopy<person>(PersonOne);
    }
}

 

posted @ 2011-08-15 16:47  啸翱姜糊  阅读(118)  评论(0)    收藏  举报