什么是浅复制以及它与 C# 中的深复制有何不同?

什么是浅复制以及它与 c# 中的深复制有何不同?

浅拷贝

浅拷贝是指拷贝一个对象的”主要”部分,但不拷贝内部的部分objects.

The “inner objects” are shared between the original object and its copy.

The problem with the shallow copy is that the two objects are not independent. If you修改一个对象,改变将会反映在另一个对象中。

深拷贝

深拷贝是一个完全独立的对象副本。如果我们复制了我们的对象,would copy the entire object structure.

If you modify the one object, the change will not be reflected in the other object.

Example

class Program{   static void Main(string[] args){      //Shallow Copy      ShallowCopy obj = new ShallowCopy();      obj.a = 10;      ShallowCopy obj1 = new ShallowCopy();      obj1 = obj;      Console.WriteLine("{0} {1}", obj1.a, obj.a); // 10,10      obj1.a = 5;      Console.WriteLine("{0} {1}", obj1.a, obj.a); //5,5      //Deep Copy      DeepCopy d = new DeepCopy();      d.a = 10;      DeepCopy d1 = new DeepCopy();      d1.a = d.a;      Console.WriteLine("{0} {1}", d1.a, d.a); // 10,10      d1.a = 5;      Console.WriteLine("{0} {1}", d1.a, d.a); //5,10      Console.ReadLine();   }}class ShallowCopy{   public int a = 10;}class DeepCopy{   public int a = 10;}

输出

10 105 510 105 10

以上就是什么是浅复制以及它与 C# 中的深复制有何不同?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1435198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 10:52:33
下一篇 2025年12月11日 15:41:40

相关推荐

  • C# 中的锯齿数组是什么?

    交错数组是 C# 中的数组的数组。您可以声明并初始化它 – int[][] rank = new int[1][]{new int[]{5,3,1}}; 以下示例展示了如何在 C# 中使用锯齿状数组 – 示例 using System;namespace Program { …

    2025年12月17日
    000
  • C# 中的集合

    C# 中的集合是 HashSet。 C# 中的 HashSet 消除了数组中的重复字符串或元素。在C#中,它是一个优化的集合集合 声明HashSet – var h = new HashSet(arr1); 上面,我们已经在 HashSet 中设置了已经声明的数组 arr1。 现在将其设…

    2025年12月17日
    000
  • C#中如何捕获内存不足异常?

    当 CLR 无法分配所需的足够内存时,会发生 System.OutOfMemoryException。 System.OutOfMemoryException 继承自 System.SystemException 类。 设置字符串 – string StudentName = “Tom”…

    2025年12月17日
    000
  • C# 程序检查路径是目录还是文件

    简介 让我们学习如何编写 C# 程序来检查路径是目录还是文件。目录,也称为文件夹,是计算机上可以保存文件的位置。除了文件之外,目录还包含其他目录或快捷方式。 文件是驱动器上的数据集合,具有唯一标识符和目录路径。当打开文件进行查看或写入时,它会转换为流。流只是遍历通信路径的字节序列。 文件与目录 文件…

    2025年12月17日
    000
  • C# 反转字符串的程序

    我们的示例字符串是 – myStr = “Tom”; 要反转字符串,首先找到字符串的长度 − // find string lengthint len;len = myStr.Length – 1; 现在,使用 while 循环,直到长度大于 0 – while (len &…

    2025年12月17日
    000
  • C# 中的静态方法与非静态方法

    Declare a member function as static. Such functions can access only static variables. The static functions exist even before the object is created. A …

    2025年12月17日
    000
  • C# 中的多重继承是什么?

    C#不支持多重继承的使用,但可以使用接口来实现。 下面是使用接口继承的实现。创建两个接口 – public interface BaseOne { void display();}public interface BaseTwo { void display();} 现在像设置派生类一样…

    2025年12月17日
    000
  • 如何在C#中声明和实例化委托?

    C# 委托类似于 C 或 C++ 中的函数指针。委托是一个引用类型变量,它保存对方法的引用。可以在运行时更改引用。 声明委托的语法 – delegate 现在让我们看看如何在 C# 中实例化委托。 声明委托类型后,必须使用 new 关键字创建委托对象并将其与特定方法关联。创建委托时,传递…

    2025年12月17日
    000
  • 什么是 Kestral C# Asp.net Core?

    Kestrel 是 ASP.NET Core 的跨平台 Web 服务器。 .NET Core 支持的所有平台和版本都支持它。 它默认作为内部服务器包含在 ASP.NET Core 中。 Kestrel 本身可以用作边缘服务器,即面向 Internet 的 Web 服务器,可以直接处理来自客户端的传入…

    2025年12月17日
    000
  • C# 中的重写和隐藏有什么区别?

    以下是重写和隐藏之间的区别 – 隐藏重新定义了完整的方法,而重写仅重新定义了方法的实现。 在重写中,您可以使用子类的对象重写方法来访问基类。影子无法访问子类方法。 阴影也称为方法隐藏。父类的方法可供子类使用,无需在遮蔽中使用 override 关键字。子类有自己版本的相同函数。 在重写下…

    2025年12月17日
    000
  • 检查 HashTable 集合是否为空的 C# 程序

    C#中的Hashtable集合是根据键的哈希码组织的键值对的集合。哈希码是使用哈希码函数计算的。 哈希表中的每个元素都是具有唯一键的键值对。键也必须是非空的。值可以为空和重复。 在本文中,我们将讨论如何检查哈希表集合是否为空。 如何检查哈希表集合是否为空? C#中实现哈希表集合的类是Hashtabl…

    2025年12月17日
    000
  • 将一个哈希表中的项目替换为另一个哈希表中的 C# 程序

    C# 中的哈希表集合是基于键的哈希码组织的键值对的非泛型集合。键用于访问哈希表集合中的元素。散列可以帮助我们有效地检索数据并消除对昂贵的数据搜索技术的需要。散列技术使用密钥本身来定位数据。该哈希表键是不可变的,并且哈希表中不允许出现重复的条目。 Hashtable类定义在System.Collect…

    2025年12月17日
    000
  • 如何使用 C# 获取人类可读的文件大小(以字节缩写为单位)?

    要获取目录,C# 提供了 Directory.GetDirectories 方法 Directory.GetDirectories 返回指定目录中与指定搜索模式匹配的子目录的名称(包括其路径),并可选择搜索子目录 为了获取文件,C# 提供了 Directory.GetFiles 方法 Directo…

    2025年12月17日
    000
  • C# 中的后台工作者类

    顾名思义,Background Worker 类允许您设置一个在后台持续运行的线程,并在需要时与主线程进行通信。 BackgroundWorker在 Windows 窗体中实现线程。密集型任务需要在另一个线程上完成,这样 UI 才不会冻结。任务完成后有必要发布消息并更新用户界面。 Backgroun…

    2025年12月17日
    000
  • 在 C# 中声明 const 数组

    在C#中,使用readonly来声明一个const数组。 public static readonly string[] a = { “Car”, “Motorbike”, “Cab” }; 在readonly中,与const不同的是,您也可以在运行时设置值。 实现上述内容的另一种替代方法是 − p…

    2025年12月17日
    000
  • 如何重载 C# 中的运算符?

    [] 运算符被称为索引器。 索引器允许对对象进行索引,例如数组。当您为一个类定义一个索引器时,该类的行为类似于一个虚拟数组。然后,您可以使用数组访问运算符([ ])访问该类的实例。 索引器可以被重载。索引器也可以声明多个参数,并且每个参数可以是不同的类型。索引不一定必须是整数。 示例1 static…

    2025年12月17日
    000
  • C# 中的静态构造函数是什么?

    静态构造函数是使用 static 修饰符声明的构造函数。它是类中执行的第一个代码块。这样,静态构造函数在类的生命周期中只执行一次。 以下是 C# 中静态构造函数的示例 – 示例 using System;using System.Collections.Generic;using Sys…

    2025年12月17日
    000
  • C# 中的 Console.TreatControlCAsInput 属性及示例

    在C#中,Console.TreatControlCAsInput属性是Console类的一个关键组成部分,它允许开发人员以更灵活的方式处理输入。本文将深入探讨Console.TreatControlCAsInput属性,帮助您了解其目的、用法,并提供实际示例。 了解 Console.TreatCo…

    2025年12月17日
    000
  • C# 中给定字符串中的单词反转

    假设以下是字符串 – Welcome 翻转字符串后,单词应该像 − 这样可见。 emocleW 使用reverse()方法并尝试以下代码来反转字符串中的单词 – 示例 using System;using System.Linq;class Demo { static voi…

    2025年12月17日
    000
  • C# 中的日志函数

    使用C#,您可以轻松地使用对数。它具有以下用于对数和以10为底的对数的方法。 序号 方法和描述 1Log(Double) 返回指定数字的自然(以e为底)对数。 2Log(Double, Double) 返回指定数字在指定底数下的对数。 3Log10(Double) 返回指定数字的以10为底的对数。 …

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信