如何实现深度拷贝?

 using System;
using System.Collections;

//引用类型
class RefType
{
}
//值类型
struct ValType
{
}
//
class MemberType:ICloneable
{
    private RefType m_r;
    private ValType m_v;
    public MemberType()
    {
    }
    public MemberType(RefType r,ValType v)
    {
        this.m_r=r;
        this.m_v=v;
    }
    //实现深度拷贝
    public object Clone()
    {
        //构造一个新的对象
        return new MemberType(m_r,m_v);
    }
}
class MyType:ICloneable
{
    public int i;
    public MemberType s;
    public MyType()
    {
    }
    public object Clone()
    {
        //实现深度拷贝
        MyType t=new MyType();
        t.i=i;
        //因为t.s是一个引用类型的字段,所以在深度拷贝的情况下,
        //应该调用t.s的Clone方法
        t.s=(MemberType)s.Clone();
        return t;
        //return this.MemberwiseClone();
    }
}
class App
{
    static void Main(string[] args)
    {
        MyType m1=new MyType();
        m1.i=10;
        m1.s=new MemberType();
        
        
        MyType m2;
        //调用m1的Clone方法
        m2=(MyType)m1.Clone();    
                
        Console.WriteLine("m2.i={0}",m2.i);
        //如果是深度拷贝,则m1和m2中的引用字段s应该不是指向
        //同一个对象,如果是浅拷贝,则m1和m2的引用字段s应该指向
        //同一个对象
        if(object.ReferenceEquals(m1.s,m2.s))
        {
            Console.WriteLine("m1.s and m2.s reference to the same string object");
        }
        else
        {
            Console.WriteLine("m1.s and m2.s reference to the different string object");
        }

        Console.Read();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值