拆箱问题

      昨天看了个C#的面试题,发现还是有很多东西是不明白的甚至是不知道的,其中有一道概念题:解释拆箱和装箱并用代码阐释,特作一下整理算是在园子的开端,希望有个好的开端也会有个好的经过,不再想wordpress那样半途而废,fighting!

⒈装箱和拆箱是一个抽象的概念。
⒉装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型 ;
利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来。
例如:

int val = 100;
object obj = val;
Console.WriteLine (“对象的值 = {0}",obj);
//这是一个装箱的过程,是将值类型转换为引用类型的过程。
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}",num);
 


这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程。 ;注:被装过箱的对象才能被拆箱
⒊.NET中,数据类型划分为值类型和引用(不等同于C++的指针)类型,与此对应,内存分配被分成了两种方式,一为栈,二为 堆,注意:是托管堆。
值类型只会在栈中分配;
引用类型分配内存与托管堆;
托管堆对应于垃圾回收。
⒋装箱/拆箱是什么?
装箱:用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。
拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。
⒌为何需要装箱?(为何要将值类型转为引用类型?)
一种最普通的场景是,调用一个含类型为Object的参数的方法,该Object可支持任意为型,以便通用。当你需要将一个值类型(如Int32)传入时,需要装箱。
另一种用法是,一个非泛型的容器,同样是为了保证通用,而将元素类型定义为Object。于是,要将值类型数据加入容器时,需要装箱。

 

好的开始仅需坚持下去,不要再让wordpress的悲剧发生,fighting!

转载于:https://www.cnblogs.com/diandi-H/p/3298045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值