首页 > 编程语言 >C#浅复制与深复制

C#浅复制与深复制

时间:2023-08-28 12:44:05浏览次数:20  
标签:set WorkInfo C# NewLine 对象 复制 public

为对象创建副本的技术成为复制,复制分为浅复制与深复制。

浅复制:将对象中的所有字段复制到新的对象中,
a、值类型字段被复制到新对象中,修改不会影响原来对象的值。
b、引用类型的复制是引用类型的引用到新对象,而不是引用类型的对象,修改引用类型的值,影响原对象的值。


深复制:将原对象的复制到新的对象中,不过,无论是值类型,还是引用类型,都是重新创建并赋值修改不影响原对象的值。

例如:

 [Serializable]
    public class DepartMent
    {
        public string Name { get; set; }
    }

    [Serializable]
    public class WorkInfo : ICloneable
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

        public DepartMent departMent { get; set; } = new DepartMent();

        public override string ToString()
        {
            return "ID:" + ID.ToString() + Environment.NewLine
                + "Name:" + Name + Environment.NewLine
                + "Age:" + Age.ToString() + Environment.NewLine + 
                "Departmen:" + departMent.Name.ToString() + Environment.NewLine + Environment.NewLine;
        }
        public object Clone()
        {
            return this.MemberwiseClone();
        }

        public WorkInfo ShallowClone()
        {
            return Clone() as WorkInfo;
        }

        public WorkInfo DeepClone()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(ms, this);
                ms.Seek(0, SeekOrigin.Begin);
                return formatter.Deserialize(ms) as WorkInfo;
            }
        }
    }

运行结果

源代码

https://files.cnblogs.com/files/panpeng666/WndDeepOrShallowClone.rar?t=1693197322&download=true

 

标签:set,WorkInfo,C#,NewLine,对象,复制,public
From: https://www.cnblogs.com/panpeng666/p/17662005.html

相关文章

  • jfx-central.com新版上线啦!
    作为JavaFX的大本营,新网站提供了库、工具、视频、书籍、教程、博客、人员、团队、案例展示等等,可以说关于JavaFX的一切!同时该网站本身,也是用JavaFX开发的,开源,能作为桌面程序运行!看介绍是使用了jpro.one,把JavaFX转为B/S,从而在浏览器访问。能实现类似效果的还有webfx.dev。烧哥最......
  • CKEditer的销毁
    由于业务需求,在一分表单中对同一个textarea需要根据下拉框的选择来决定该文本域是纯文本还是富文本于是需要试用CKEditer在创建与销毁之间不断切换,尝试了很多方法后,终于找到了可用的销毁方法 生成方法如下:CKEDITOR.replace('content');销毁方法如下: if(CKEDITOR.instances['c......
  • Scrum方法和专业敏捷工具
    敏捷开发方法是一种以人为核心、迭代、循序渐进的软件开发方法。Scrum:这是一种非常流行的方法,它借用了足球scrum的名称并将其用作隐喻。Scrum方法包括以下关键角色:产品所有者、ScrumMaster和开发团队。在每个迭代中,产品所有者负责确定优先级并描述下一个迭代的目标,ScrumMaste......
  • CSRF
    什么是CSRFCSRF案例分析CSRF挖掘CSRF防御什么是CSRFwhat:Cross-SiteRequestForgery跨站请求伪造一个典型的CSRF攻击有着如下的流程:受害者登录a.com,并保留了登录凭证(Cookie)。攻击者引诱受害者访问了b.com。b.com向a.com发送了一个请求:a.com/act=xx。浏览器会默认......
  • Codeforces Round 888 (Div. 3)G. Vlad and the Mountains(数据结构,图论)
    题目链接:https://codeforces.com/contest/1851/problem/G 大致题意: 给出n个点m条边的无向图,每个点有点权h【i】。从点i到点j会消耗h【j】-h【i】的能量,如果小于0,那么就是恢复对应绝对值的能量。 进行q次询问,每次询问包含起点s,终点t,能量e,能量在移动过程中不能小......
  • Codeforces Round 887 (Div. 1)C. Ina of the Mountain(数据结构,反悔贪心)
    题目链接:https://codeforces.com/problemset/problem/1852/C 题意: 给定一个长度为n的序列和正整数k; 每次可以选取任意一个区间,将区间内每个数减1; 如果出现一个数变成0,那么那个数变成k; 问至少操作多少次可以使得每个数变成k; 分析: 将每个数值抽象为对应高度的......
  • Codeforces Round 892 (Div. 2)E. Maximum Monogonosity(动态规划,数学)
    题目链接:https://codeforces.com/contest/1859/problem/E 题意: 有长度为n的a和b俩个序列,定义f【l,r】=abs(a【l】-b【r】)+abs(b【l】-a【r】); 给正整数k,求 不相交的区间且  所有  区间的长度 的 和 为k的最大值 是多少? 分析: 这里借鉴一个佬......
  • Educational Codeforces Round 151 (Rated for Div. 2)E. Boxes and Balls(数学,动态规
    题目链接:https://codeforces.com/contest/1845/problem/E 题意: 给定长度为n且只含0和1的数组,你可以进行以下操作: 交换相邻的0和1; 给正整数k,问经过k次操作后,会有多少种本质不同的结果; 分析: 如果1比0多,我们可以把他们取反(让0比1多,结果是一样的) 设计状态dp[i][j......
  • Codeforces Round 885 (Div. 2)E. Vika and Stone Skipping(数学,质因数分解)
    题目链接:https://codeforces.com/problemset/problem/1848/E 大致题意: 打水漂,某人在海岸线以f(正整数)的力量扔出石头,会在f,f+(f-1),f+(f-1)+(f-2),........,f+(f-1)+.....+2+1,的位置接触水面; 现在给出坐标x和q次询问,每次询问给出一个y值,将x=x*y;假设石头在x的位置接触水面,问有多少......
  • pycharm中自定义函数补全
    在PyCharm中,你可以通过以下步骤实现这一目标:打开PyCharm,点击顶部菜单的"File"(文件)->"Settings"(设置)。在弹出的窗口中,选择"Editor"(编辑器)->"LiveTemplates"(代码模板)。在左侧的列表中,选择"Python"或者你希望的分类,然后点击右侧的"+"按钮,添加一个新的代码模板。......