C# 一看就懂的装箱拆箱案例

这篇具有很好参考价值的文章主要介绍了C# 一看就懂的装箱拆箱案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在C#中,装箱(Boxing)和拆箱(Unboxing)是值类型与引用类型之间相互转换的过程。

装箱(Boxing)

当一个值类型(如整数、结构体或枚举等)需要转换为对象(System.Object)或接口类型时,系统会自动创建一个新的对象实例,并将该值类型变量的值复制到新创建的对象中。这个过程就称为装箱。例如:

int value = 42; // 值类型变量
object obj = value; // 装箱:将value装入新的Object引用类型中

在这个例子中,value 是一个值类型的整数变量,将其赋给 object 类型的变量 obj 时,编译器会在堆上分配一块内存,创建一个新的 System.Object 实例,并将 value 的值拷贝到这块内存中。

拆箱(Unboxing)

相反,从引用类型转换回值类型的过程被称为拆箱。这意味着你需要明确地将存储在引用类型中的值类型数据提取出来,放回到值类型变量中。如果尝试拆箱的对象实际不是一个对应值类型的装箱实例,则会抛出 InvalidCastException 异常。例如:

object obj = 42; // 创建一个装箱后的对象引用
int intValue;
if (obj is int) // 检查对象是否可以安全地拆箱为int
{
    intValue = (int)obj; // 拆箱:从对象中取出原始的int值
    Console.WriteLine(intValue); // 输出:42
}

在这段代码中,我们首先有一个已装箱的 object 类型变量 obj,然后通过类型转换表达式 (int)obj 进行拆箱操作,将 obj 中存储的整数值重新转换回 int 类型并赋值给 intValue 变量。拆箱前使用 is 关键字进行检查是一个好的编程实践,以确保安全性。

编程语言中的装箱与拆箱优缺点

优点:

  1. 兼容性:装箱允许值类型与引用类型之间进行交互,如将值类型传递给接受 object 类型参数的方法或存储在 ArrayListDictionary 等集合中。
  2. 泛型和接口支持:通过装箱,值类型可以实现泛型类或接口要求的引用类型约束。

缺点:

  1. 性能损失:装箱和拆箱操作均涉及内存分配和复制,对性能有一定影响。频繁的装箱拆箱会增加GC(垃圾回收)的压力,并可能导致程序运行速度降低。
  2. 额外开销:每次装箱都需要创建一个新的对象实例,占用额外的堆空间;拆箱时需要进行类型检查并从对象中提取值类型数据,也存在一定的运行时开销。
  3. 异常风险:在拆箱过程中,如果对象实际类型与目标值类型不符,则会抛出 InvalidCastException 异常,需要开发者确保安全拆箱或者捕获可能的异常。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
C# 一看就懂的装箱拆箱案例,c#,开发语言文章来源地址https://www.toymoban.com/news/detail-786511.html

到了这里,关于C# 一看就懂的装箱拆箱案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一看就懂的OpenGL ES教程——仿抖音滤镜的各种奇技淫巧(一)_opengl es添加视频

    上一篇文章一看就懂的OpenGL ES教程——渲染宫崎骏动漫重拾童年 已经详细阐述了如何用OpenGL es将原始的YUV数据组成的视频渲染到屏幕上,想必有很多童鞋在阅读了它之后依然觉得回味无穷,学习的胃口也越来越大了,因为你们知道仅仅渲染视频是不够的,我们要的是,能够在

    2024年04月25日
    浏览(36)
  • 一看就懂的OpenGL ES教程——仿抖音滤镜的各种奇技淫巧(一)_opengl es添加视频(1)

    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。 深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学

    2024年04月16日
    浏览(34)
  • java三层架构,有图有案例有代码,一看就懂!!!

    三层架构 三层结构解释: 视图层:主要是用于与用户进行交互,比如接收用户输入的内容将返回结果向用户展示等。 业务逻辑层:实现每个功能的特定的逻辑方法。 数据访问层:主要是与数据库进行连接,然后对数据库进行增删改查工作。 结构一: 包的层级结构: 三层结

    2024年02月03日
    浏览(36)
  • python文件操作(一看就懂)

    现在我们接着上文讲,如果没有看过我上篇文章的萌新朋友们可以先去看看,不然一会儿容易读的你满脸问号。python字符编码 现在我们来思考一个问题,我们在PyCharm里敲字符,这个字符应当先存到内存中去,而内存里都存的是unicode格式的二进制,如果我们现在就把他存到硬

    2024年02月03日
    浏览(31)
  • 插入排序超详解释,一看就懂

    目录 一、插入排序的相关概念 1、基本思想 2、基本操作:有序插入 二、插入排序的种类 三、直接插入排序 1、直接插入排序的过程:顺序查找法查找插入位置 2、使用“哨兵”直接插入排序 四、 直接插入排序算法描述 五、折半插入排序 1、查找插入位置时采用折半查找法,

    2024年01月25日
    浏览(33)
  • 【数据结构】插入排序详细图解(一看就懂)

      💯 博客内容:【数据结构】插入排序详细图解(一看就懂) 😀 作  者:陈大大陈 🦉所属专栏:数据结构笔记 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,

    2024年02月07日
    浏览(39)
  • 微信小程序实现倒计时功能,一看就懂,直接用

    结构完整,直接用就可以

    2024年02月01日
    浏览(51)
  • 如何在android运行lua脚本(最简单的讲解,一看就懂)

    1.打开 android studio 2.引入luaj-jse-3.0.1.jar包(百度自行下载) 3.新建assets文件夹 4.在assets文件夹下新建一个 main.lua文件,内容如下 5.MainActivity.java 内容如下 5.运行程序

    2024年02月11日
    浏览(26)
  • 【Pandas】四个例子掌握用Python进行数据分析!一看就懂!

    本文选取了四个经典案例,主要聚焦Pandas在数据分析中的简单应用,结合代码学习利用Python进行数据分析过程(●ˇ∀ˇ●)。在每个例题开始前,我们将会标注出本例题涉及的重要知识点,并在重要处添加解释和代码注释,共读者参考。 如果你遇到任何问题,欢迎在评论区一起

    2024年02月17日
    浏览(45)
  • 【Unity】图解 碰撞检测函数,一看就懂!(OnCollisionEnter、OnCollisionStay、OnCollisionExit、OnTriggerEnter......)

    现有: Lesson16脚本的代码: 运行: 何为触发器:勾选了碰撞器的Is Trigger参数,这个游戏物体就会变成一个触发器 现有: Lesson16脚本的代码: 运行: 1.只要脚本挂载的对象 能和别的物体产生碰撞或触发,那么上面那六个函数就能够被相应 (有物理效果的相应的是\\\"物理碰撞

    2023年04月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包