引用类型的对象复制(浅复制和深复制)

引用类型的对象复制,分为浅复制和深复制。。。

 

浅复制就简单的把地址复制给另一个对象,其中有一个对象发生变化,2个都有变化。

实现方式,实现 ICloneable 接口,调用 MemberwiseClone()方法就可以了。

 

深复制就完全产生一个新的对象,二者属性一样,但没有任何关联。。

实现方式,可以重新 new 一个对象,也可以通过序列化、反序列化来实现。。

 

代码:

 

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace H.DBF
{
    /// 
<summary>
    /// Model对象基类
    /// 
</summary>
    [Serializable]
    public abstract class ObjBase:ICloneable
    {
        #region ICloneable 成员
        /// 
<summary>
        /// 浅复制
        /// 
</summary>
        /// 
<returns></returns>
        public object Clone()
        {
            return this.MemberwiseClone();
        }

        /// 
<summary>
        /// 深度拷贝,使用序列化方式,在数据量大时速度很慢!
        /// 
</summary>
        /// 
<returns></returns>
        public object DeepClone()
        {
            //使用 序列化/反序列化,在数据量大时相当慢!
            object obj;
            using (MemoryStream ms = new MemoryStream())
            {
                BinaryFormatter bf = new BinaryFormatter(null, new System.Runtime.Serialization.StreamingContext());

                bf.Serialize(ms, this);
                ms.Seek(0, SeekOrigin.Begin);

                obj = bf.Deserialize(ms);
                ms.Close();

                return obj;
            }
            //ObjBase obj = (ObjBase) System.Activator.CreateInstance(this.GetType());
            //obj.TableName = this.TableName;
            //obj.Columns = this.Columns;

            //return obj;
        }
        #endregion
    }
}

 

 

posted @ 2010-03-01 12:27  -Enchant  阅读(951)  评论(0编辑  收藏  举报