浅拷贝-基础理解

   public class CopyTest
    {
        public static void TestCopy()
        {
            /*
             *  深拷贝:指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。
             *         深拷贝之后的对象是相互独立的,人生有了独立的轨迹,不在互相影响。
             *  
             *   浅拷贝:指的是拷贝一个对象时,仅仅拷贝对象的引用进行拷贝,但是拷贝对象和源对象还是引用同一份实体。
             *          浅拷贝的对象似与影子,都是同一个实体的,随便动一个,其他都会保持一致
             */
            HotDrink hotDrink1 = new HotDrink() {  Milk=5, Sugar=3};
            HotDrink hotDrink2 = hotDrink1;
            HotDrink hotDrink3 = new HotDrink();
            hotDrink3 = hotDrink1;
            HotDrink hotDrink4 = new HotDrink();
            hotDrink4.Milk = hotDrink1.Milk;
            hotDrink4.Sugar = hotDrink1.Sugar;

            Console.WriteLine("初始化值:");
            Console.WriteLine("         hotDrink2 = hotDrink1;");
            Console.WriteLine("         hotDrink2 = hotDrink1;");
            Console.WriteLine("         HotDrink hotDrink3 = new HotDrink(); hotDrink3 = hotDrink1;");
            Console.WriteLine("         HotDrink hotDrink4 = new HotDrink(); hotDrink4.Milk = hotDrink1.Milk;");


            Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar);
            Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar);
            Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar);
            Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);
            Console.WriteLine();

            hotDrink2.Milk = 5 * 2;
            hotDrink2.Sugar = 3 * 2;

            hotDrink3.Milk = 5 * 3;
            hotDrink3.Sugar = 3 * 3;

            hotDrink4.Milk = 5 * 4;
            hotDrink4.Sugar = 3 * 4;

            Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}",hotDrink1.Milk,hotDrink1.Sugar);
            Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar);
            Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar);
            Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);
            Console.WriteLine();
            hotDrink1.Milk = 11;
            hotDrink1.Sugar = 4;

            hotDrink4.Milk = 44;
            hotDrink4.Sugar = 88;

            Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar);
            Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar);
            Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar);
            Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);

            Console.WriteLine();
            hotDrink4.Milk = 11;
            hotDrink4.Sugar = 4;


            Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar);
            Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);


            Console.WriteLine("hotDrink1 equals(==) hotDrink4? {0}", hotDrink1 == hotDrink4);
            Console.WriteLine();
            Console.WriteLine("hotDrink1 equals(Equals) hotDrink4? {0}", hotDrink1.Equals( hotDrink4));
            Console.WriteLine();

            Console.WriteLine("hotDrink1 equals(==) hotDrink2? {0}", hotDrink1 == hotDrink2);
            Console.WriteLine();
            Console.WriteLine("hotDrink1 equals(Equals) hotDrink4? {0}", hotDrink1.Equals(hotDrink2));


            Console.WriteLine("hotDrink2,hotDrink3都是浅拷贝(shallow copy,System.Object 的MemberwiseClone()),操作hotDrink1,hotDrink2,hotDrink3任意一个值,都会一起更改,其地址一样。");
            Console.WriteLine("hotDrink4表现和深拷贝一致(deep copy),简单可以通过ICloneable接口实现,复杂的可以通过反射、序列化,表达式树来实现深拷贝。");


            Console.ReadLine();
        }
    }

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值