public void Execute()
        {
            //浅克隆:创建新的对象,指向老对象的值
            //深克隆: 创建新的对象,指向新创建的老对象的值
            Console.WriteLine("请选择克隆方式:1.浅克隆 2.深克隆");
            string cloneType = Console.ReadLine();

            AbstractPrototype prototype,copy;
            prototype = new ConcretePrototype();

            if (cloneType=="1")
                copy=prototype.ShallowClone();
            else
                copy = prototype.DeepClone();
            Console.WriteLine("对象是否相同" + (prototype == copy));
            Console.WriteLine("值是否相同" + (prototype.entity == copy.entity));
        }
Beispiel #2
0
        static private void ShallowCloneTest()
        {
            //创建原型 a, 并浅拷贝为 b。
            ConcretePrototype a = new ConcretePrototype();
            ConcretePrototype b = (ConcretePrototype)a.ShallowClone();

            Debug.Log(a.id + ", " + a.name + ", " + a.extra.id + ", " + a.extra.name);   //1, A, 1, A
            Debug.Log(b.id + ", " + b.name + ", " + b.extra.id + ", " + b.extra.name);   //1, A, 1, A

            //尝试修改b
            b.id         = 2;
            b.name       = "B";
            b.extra.id   = 2;
            b.extra.name = "B";

            //B正常,全部被修改
            //A的基础类型成员(string不是基础成员,但具有基础成员的性质)没有被修改(正常)。但引用类型成员被修改(因为浅拷贝的缘故)
            Debug.Log(a.id + ", " + a.name + ", " + a.extra.id + ", " + a.extra.name);   //1, A, 2, B
            Debug.Log(b.id + ", " + b.name + ", " + b.extra.id + ", " + b.extra.name);   //2, B, 2, B
        }
Beispiel #3
0
        public void Execute()
        {
            //浅克隆:创建新的对象,指向老对象的值
            //深克隆: 创建新的对象,指向新创建的老对象的值
            Console.WriteLine("请选择克隆方式:1.浅克隆 2.深克隆");
            string cloneType = Console.ReadLine();

            AbstractPrototype prototype, copy;

            prototype = new ConcretePrototype();

            if (cloneType == "1")
            {
                copy = prototype.ShallowClone();
            }
            else
            {
                copy = prototype.DeepClone();
            }
            Console.WriteLine("对象是否相同" + (prototype == copy));
            Console.WriteLine("值是否相同" + (prototype.entity == copy.entity));
        }