20240722-【C# 装箱和拆箱】

在C#中,装箱(Boxing)和拆箱(Unboxing)是用于在值类型(Value Type)和引用类型(Reference Type)之间进行转换的概念。

装箱(Boxing) 是将值类型对象封装到引用类型对象中的过程。当一个值类型被装箱时,它的值被复制到一个堆分配的对象中,并且该对象包含对该值的引用。装箱操作会导致在堆上创建新的对象,并导致额外的内存开销。装箱后,值类型的变量被视为引用类型的变量,可以被存储在引用类型的变量中或作为引用类型的方法参数传递。

拆箱(Unboxing) 是从装箱后的对象中提取值类型的过程。当一个装箱后的对象需要被拆箱时,运行时会检查对象的类型,并将对象中的值类型数据提取出来,存储到一个新的值类型变量中。拆箱操作涉及将引用类型对象转换回值类型,如果装箱前和拆箱后的类型不匹配,可能会引发运行时异常。

下面是一个示例,展示了装箱和拆箱的过程:

csharp 复制代码
int value = 42;  // 值类型变量

// 装箱操作
object obj = value;  // 将值类型装箱为引用类型

// 拆箱操作
int newValue = (int)obj;  // 将装箱后的对象拆箱为值类型

Console.WriteLine(newValue);  // 输出: 42

在上述示例中,value 是一个值类型变量,包含整数值 42。通过将其赋值给一个 object 类型的变量 obj,发生了装箱操作。obj 现在引用一个装箱后的对象,其中包含值类型的数据。然后,通过将 obj 强制转换为 int 类型,发生了拆箱操作,并将提取出的值赋给 newValue 变量。

需要注意的是,频繁的装箱和拆箱操作可能会导致性能下降,因为它们涉及额外的内存分配和数据复制。因此,在设计和编写代码时,应尽量避免不必要的装箱和拆箱操作,以提高性能和效率。

相关推荐
知识分享小能手2 分钟前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 新增功能 — 语法知识点及使用方法详解(20)
数据库·学习·sqlserver
专注VB编程开发20年2 分钟前
C#,VB.NET如何用GPU进行大量计算,提高效率?
开发语言·c#·.net
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧3 分钟前
Jsoup: 一款Java的HTML解析器
java·开发语言·前端·后端·缓存·html
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧4 分钟前
JSP, MVC, El, JSTL, MAC
java·开发语言·mvc·mac·jsp
黎雁·泠崖6 分钟前
Java 数据结构与算法:时间空间复杂度 从入门到实战全解
java·开发语言
kyle~11 分钟前
Python---webbrowser库 跨平台打开浏览器的控制接口
开发语言·python·web
wuqingshun31415911 分钟前
简述双亲委派机制以及其优点
java·开发语言·jvm
草莓熊Lotso13 分钟前
Ext 系列文件系统核心:块、分区、inode 与块组结构详解
android·linux·c语言·开发语言·c++·人工智能·文件
2501_9449347317 分钟前
高职金融大数据应用专业,怎么学习金融数据建模基础?
大数据·学习·金融
nix.gnehc19 分钟前
Go进阶攻坚+专家深耕级学习清单|聚焦高并发、高性能中间件/底层框架开发(Java开发者专属)
学习·中间件·golang