C#拆箱与装箱

【前提】

值类型

整数类型、浮点型(float double)、小数型(decimal)、布尔型(bool)、字符型(char)、结构型(struct)、枚举型(Enum)

引用类型

类:面向对象编程的基本单位,包含数据成员(常量、域、事件)、函数成员(方法、属性、索引指示器、运算器、构造函数、析构函数)、嵌套类型的数据结构。支持集成机制,通过继承,派生类可以扩展基类的数据成员和方法,实现代码重用和设计重用。

委托:引用方法的指针,相当于C++的指针。允许实例化和调用类的静态方法、调用类指定实例的方法,不能有返回值和带输出类型的参数。

接口:包含了方法的数据结构,在代码中调用组件对象功能。成员有:方法、属性、索引指示器、事件。

数组:存储同一类型的参数。描述数组用:数组名、数据元素的类型、维数。

数据转换

隐式转换:系统默认的,从低精度、小范围的数据类型转换为高精度、大范围的数据类型。

显式转换:又称强制转换,需要用户明确地指定转换的类型。

Object类

是所有类型的根,C#中所有类型都直接或间接地从Object类中继承。


【装箱拆箱】

装箱

将值类型转换成引用类型

<span style="font-size:18px;">int num=10;
object obj=num;
Console.WriteLine(obj);
Console.ReadKey();</span>

拆箱

将值类型转换为引用类型,再将引用类型转换成值类型(被装过箱的才可以被拆)

<span style="font-size:18px;">int num=10;
object obj=num;
int number=(int)obj;
Console.WriteLine(obj);
Console.ReadKey();</span>

装箱原因

1.调用一个含类型为Object的参数的方法,该Object可支持任意为型,以便通用。当你需要将一个值类型(如Int32)传入时,需要装箱。 

2.一个非泛型的容器,同样是为了保证通用,而将元素类型定义为Object。于是,要将值类型数据加入容器时。

装箱/拆箱内部操作 

装箱 

对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。
第一步:新分配堆内存。
第二步:将值类型的实例字段拷贝到新分配的内存中。 
第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。 

拆箱

检查对象实例,确保它是给定值类型的一个装箱值。将该值从实例复制到值类型变量中。 最关键的是检查对象实例的本质,拆箱和装箱的类型必需匹配。


推荐《拆箱与装箱整理》  《C#堆栈讲解》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值