首页 > 其他分享 >创建型设计模式-原型模式(深拷贝,浅拷贝)

创建型设计模式-原型模式(深拷贝,浅拷贝)

时间:2022-11-07 17:33:52浏览次数:49  
标签:set string Person 原型 Address 拷贝 设计模式 public

Person类:

 public class Person 
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public Address Address { get; set; }
        public  Person Clone()
        {
            //MemberwiseClone方法实现浅拷贝
            return this.MemberwiseClone() as Person;
        }
    }

Address类

public class Address
    {
        public string Province { get; set; }
        public string City { get; set; }
    }

具体调用(浅拷贝)

Person person = new Person()
{
    Name = "zhangsan",
    Age = 23,
    Address = new Address()
    {
        City = "shanghai",
        Province = "china"
    }
};
Person person1 = person.Clone();
Console.WriteLine(person.Equals(person1)); //false
person1.Address.Province = "lisi";
Console.WriteLine(person.Address.Province); //lisi  
通过object.MemberWiseClone()获取一个对象的实例属于浅拷贝,对实例的简单类型属性进行全值拷贝(包含string类型),对复杂类型属性只拷贝了引用,源对象的引用类型值改变了,则克隆出来的对象对应的属性值也会进行修改,因为操作的是同一个地址指针所指向的空间
深拷贝
Person person = new Person()
{
    Name = "zhangsan",
    Age = 23,
    Address = new Address()
    {
        City = "shanghai",
        Province = "china"
    }
};
string objstr = JsonConvert.SerializeObject(person1);
Person person2 = JsonConvert.DeserializeObject<Person>(objstr);

深拷贝 序列化实现 ,相当于把源对象的值存放在了string字符串当中,当做中间变量,反序列化字符串得到的对象是完全开辟的新空间,它的引用类型字段的地址所指向的是不同的空间,所以修改克隆出来的实例的值并不会修改源对象的值

标签:set,string,Person,原型,Address,拷贝,设计模式,public
From: https://www.cnblogs.com/liuzongxian/p/16866726.html

相关文章

  • 创建型设计模式-单例模式(为什么要双重加锁判断)
    代码publicclassSingleObject{privatestaticSingleObjectinstance;privatestaticobjectlockobj=newobject();privateSingleObject(){}publicstatic......
  • 设计模式学习(二):单例模式
    设计模式学习(二):单例模式作者:Grey原文地址:博客园:设计模式学习(二):单例模式CSDN:设计模式学习(二):单例模式单例模式单例模式是创建型模式。单例的定义:“一个类只允许创建......
  • Axure RP 9 for Mac(交互式产品原型设计工具)
    axurerp9mac是一款备受瞩目的产品原型设计软件,它可以让你在上面任意构建草图、框线图、流程图以及产品模型,还能够注释一些重要地方,axurerp汉化版可支持同时多人写作设......
  • 〖JAVA养成计划〗设计模式-单例设计模式以及衍生的多例设计模式
     单例设计模式packagecom.tongbu;/***单例设计模式分为两类:*①是俄汉式*②是懒汉式*以下程序是俄汉式:不管程序中有没有使用,都实例化对象。*@authorAdministrat......
  • 编写成功的椭圆latex底稿,可以直接拷贝。注意文章中有图片ellipse.png需要复制到文章所
    %注意,本文为了在数学公式中使用中文,调用了xeCJKsetup{CJKmath}所以,不能用pdfLatex编译器,要用Xelatex编译器,否则报错。即,在编译器左上角的绿色箭头右侧下拉框里,选择Xelatex.......
  • 死磕Java面试系列:深拷贝与浅拷贝的实现原理
    深拷贝与浅拷贝的问题,也是面试中的常客。虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝。其实工作中也常常需要......
  • 23种设计模式之自定义Spring框架(五)
    7,自定义Spring框架7.1spring使用回顾自定义spring框架前,先回顾一下spring框架的使用,从而分析spring的核心,并对核心功能进行模拟。数据访问层。定义UserDao接口及其子......
  • 23种设计模式之设计模式介绍(一)
    1,设计模式概述1.1软件设计模式的产生背景"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境......
  • 设计模式
    设计模式(一)——简单工厂设计模式(二)——工厂方法设计模式(三)——抽象工厂设计模式(四)——建造者模式设计模式(五)——原型模式设计模式(六)——单例模式......
  • 浅谈PHP设计模式的桥接模式
    简介:桥接模式又叫桥梁模式,属于结构型模式。目的是将抽象与实现分离,使它们都可以独立的变化,解耦。继承有很多好处,但是会增加耦合,而桥接模式偏向组合和聚合的方式来共享。......