浅拷贝-基础理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiqingli/article/details/79083318
   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();
        }
    }

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qiqingli/article/details/79083318