C# 中的浅拷贝和深拷贝2024 年 8 月 29 日 | 4 分钟阅读 在许多编程语言中,例如 Java 或 C#,当我们把一个对象变量赋值给另一个对象变量时,我们复制的是对象在内存中的位置引用,而不是对象本身。因此,这两个变量都指向内存中同一个对象实例。这与像 int、bool 等值类型变量形成对比,值类型变量直接包含实际值。 例如 在这里,g1 和 g2 是引用变量,它们存储指向内存中实际 MyClass 对象的引用(内存地址),比如地址 5000。当我们用 = 将 g1 赋值给 g2 时,我们复制的是引用,所以现在 g1 和 g2 指针都指向地址 5000 处的 SAME MyClass 实例。 因此,通过 g1 或 g2 对对象所做的任何更改都将通过两者访问对象时可见,因为实际对象仍然只有一个。这与复制像 int 这样的值类型不同,在值类型中,g2 将存储其独立的值副本。 总而言之,= 赋值运算符与引用类型一起使用时,复制的是引用,而不是实际对象,导致两个引用都指向同一个实例。值类型直接包含值,因此赋值将值复制到新变量中。 什么是浅拷贝?对象的浅拷贝不会创建嵌套对象的新副本,而是复制对嵌套对象的引用。这意味着被复制的对象指向与原始对象相同的嵌套对象。 更详细地
示例让我们看一个 C# 程序来演示**浅拷贝**概念。 输出 Original: Person: Jane, Age: 25, Hobbies: Reading, Gaming, Traveling Copy: Person: John, Age: 30, Hobbies: Reading, Gaming, Traveling 什么是深拷贝?**深拷贝**是一种对象拷贝,它完全复制原始对象中所有级别的嵌套对象。这意味着它不是复制嵌套对象的对象引用,而是创建这些嵌套对象的新实例。 更详细地
示例让我们看一个 C# 程序来演示深拷贝概念。 输出 Original: Person: Virat, Age: 25 Copy: Person: Virat, Age: 30 |
简介:作为一种编程语言,C# 长期以来一直与 Microsoft 及其 .NET 框架相关联。凭借其强大的功能和对多种编程范式的支持,C# 是开发桌面应用程序、Web 应用程序和游戏的流行选择。C# 的一个有趣方面是它能够...
阅读 4 分钟
使用 ListDictionary.SyncRoot 属性获取可能用于同步对 ListDictionary 访问的对象。ListDictionary 是一个专用集合。它由 System.Collections Specialized 命名空间涵盖。此类型表示一个非泛型字典类型。它使用链表实现。语法:它具有...
5 分钟阅读
C# StringBuilder 与 Java StringBuilder 类似。String 对象是不可变的,这意味着它一旦创建就不能被修改。每次调用 System.String 类函数时,都会在内存中创建一个新的字符串对象。例如,如果字符串 "NetworkProgramming" 占用内存...
阅读 3 分钟
C# 编程中的 List<T> 类是常用的几种集合类型之一,它提供了动态数组,以简化数据管理和操作。在使用列表时,一项经常执行的任务是访问和更新给定索引处的元素。在这篇博文中,我们将讨论...
阅读 4 分钟
C# 中的 double.IsNaN() 方法属于“System”命名空间,用于检查给定的双精度浮点值是否为“非数字”(NaN) 值。NaN 是 IEE 754 浮点标准定义的特殊值。NaN 是一个特殊值...
阅读 3 分钟
在本文中,您将学习 C# 中的 Decimal.ToSByte() 方法,包括其语法、参数和示例。Decimal.ToSByte() 是什么?C# 中的 System 命名空间包含“Decimal.ToSByte()”方法,用于将十进制数转换为有符号字节 (sbyte)。语法:它具有以下语法:public...
阅读 4 分钟
简介:转义序列是任何编程语言(包括 C#)的基本功能。它们允许程序员表示一些不容易在键盘上键入的字符,或者在语言本身中具有特殊含义的字符。在本文中,我们将讨论 C# 中的转义序列和...
阅读 3 分钟
在本文中,我们将讨论其语法和示例。Type.issubclassof() 方法是什么? 类是描述面向对象编程开发中的方法、属性和对象的模板。继承的概念意味着子类从其父类派生,并且...
5 分钟阅读
C# 中的 Uri.DnsSafeHost 字段是 Uri 类的成员,用于以 DNS 安全格式访问统一资源标识符 (URI) 的主机元素。为了理解此属性,我们必须了解其特性、重要性以及它在更广泛的...中的位置。
阅读 3 分钟
在本文中,我们将讨论其语法和示例。继承文档是什么?根据 C# 编程语言文档标记 <inheritdoc/>,文档注释必须继承基类或已实现接口的文档。语法:它具有以下语法:<inheritdoc [cref="base-member-ref"] [select="filter-expr"] /> <inheritdoc>:...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India