理解C#中装箱和拆箱的概念

前言

  • C#数据类型
  • 什么是装箱、拆箱
  • 产生装箱、拆箱的举例
  • 总结

前言

C# 是一种通用、面向对象的编程语言,由微软(Microsoft)开发的,属于强类型语言,变量需先声明数据类型、然后给变量赋初值,最后才能使用该变量。否者程序直接报错、提示。

一、c#数据类型

在c#中数据类型分为值类型、引用类型。

  1. 值类型有:int、double、bool、decimal、enum、struct等,数据存放在栈stack中。
  2. 引用类型有:string、数组、自定义类、object、接口等,数据存放在堆heap中,地址存放在栈stack中。

二、什么是装箱、拆箱

简单来说:封箱(boxing)是把值类型数据,转换为引用类型。拆箱(unboxing)是把引用类型数据,转换为值类型。通过装箱和拆箱操作,可以实现值类型与引用类型的互相转换,最终能够实现任何类型的值,可以按照

程序中发生装箱和拆箱先决条件:

1. 发生类型转换。

2. 存在继承关系。

三、产生装箱、拆箱的举例

intiVal = 1;//定义int型变量

object obVal;  //定义object型变量

obVal= iVal; //将int型转成object型

//根据里氏转换原则,可以把派生类赋值给基类

//这里出现了装箱,额外耗费cpu和内存资源

Console.WriteLine("这是装箱,是将值类型,转换为引用类型");

iVal = (int)obVal; //将object型转成int型

//根据里氏转换原则,当基类中装的是派生类,可以强转

//这里出现了拆箱,额外耗费cpu和内存资源

Console.WriteLine("这是拆箱,是将引用类型,转换为值类型");

  • 总结
  1. 拆箱和装箱过程正好相反,有发生的先决条件。
  2. 拆箱和装箱过程符合里氏转换原则。
  3. 装箱操作和拆箱操作,是要额外耗费cpu和内存资源的,在进行大量的计算时,要避免装箱、拆箱,否则严重影响程序的效率。
  4. 微软在c# 2.0之后,引入了泛型概念,来减少装箱操作和拆箱操作引起的消耗。

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值