您的位置:首页 > 其它

.net 对象浅拷贝和深拷贝的实现

2015-11-27 15:03 260 查看
对象A浅拷贝到对象B,A和B实际是同一个引用,改变A就会改变B。

对象A深拷贝到对象B,B是一个全新的对象,与A只是值相同。

 具体实现:

方法1:继承接口ICloneable

public class Class1:ICloneable

    {

        int m_member1;

        string m_member2;

        Class2 m_obj;

       

        /// <summary>

        /// 浅拷贝

        /// </summary>

        /// <returns></returns>

        public Object Clone()

        {

            return this.MemberwiseClone();

        }

        /// <summary>

        /// 深拷贝

        /// </summary>

        /// <returns></returns>

        public Object Clone()

        {

            Class1 ret = new Class1();//new一个新对象

            ret.m_member1 = this.m_member1;//给新对象成员赋上一样的值

            ret.m_member2 = this.m_member2;

            ret.m_obj = (Class2 )this.m_obj.Clone();//新对象中有其他复杂类成员时,不要直接赋值,而是对成员进行深拷贝。

            return ret;//将新对象返回

        }

    }

    public class Class2:ICloneable

    {

        string m_str;

        /// <summary>

        /// 深拷贝

        /// </summary>

        /// <returns></returns>

        public Object Clone()

        {

            Class2 ret = new Class2();

       
4000
     ret.m_str = this.m_str;

            return ret;

        }

    }

 

使用:

Class1 A = new Class1();

Class1 B = A.Clone();//对A进行深拷贝或浅拷贝

方法2:自定义带拷贝功能的构造函数

public class Class1

    {

        int m_member1;

        string m_member2;

        Class2 m_obj;

        

public Class1()

{

}

        public Class1(Class1 org,bool deepCopy)

{

this.m_member1=org,m_member1;

this.m_member2=org.m_member2;

if(deepCopy)

this.m_obj= (Class2 )this.m_obj.Clone();//深拷贝

else

this.m_obj=org.m_obj;//浅拷贝

    }

    public class Class2

    {

        string m_str;

    }

使用:

Class1 A=new Class1 ();

Class1 B=new Class1(A,true);//深拷贝

Class1 C=new Class1(A,false);//浅拷贝
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: