C#中的"装箱"(boxing)与"拆箱"(unboxing)

本文深入探讨了C#中类型转换的概念,包括装箱和拆箱的过程,以及它们在内存中的表现形式。通过实例展示了如何进行隐式和显式的类型转换,并强调了拆箱操作的注意事项,确保类型转换的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* 作者:耿奕廷    版权所有,转载时请注明出处及作者    */

 

我们知道在C#中,所有的类型都派生自类object,而派生类和继承类之间可以互相转换,这就有了“装箱”与“拆箱”的概念。

装箱:是指把某一类型的值显式或隐式的转换成object类型,或转成被此类型继承的接口。装箱后,这个object类的值在内存中heap区,是原类型的一个拷贝。如:

   int i=2;
   string str="Hello";
   object objstr=str;      //隐式
   object objint=(object)i; //显式

有意思的是被装箱后可以用obj.ToString()来打印原值,如 Console.WriteLine(objstr.ToString())显示的是Hello。

拆箱:是指把装箱后的object类型显式转成原类型。这时可以用is运算符或GetType()来判断object的原类型。如

int  n=(int)objint;

int s=(string)objstr;

if(objint is int) Console.WriteLine("Yeah!");

if(objstr.GetType().ToString()=="System.String") Console.WriteLine("OK");

拆箱注意:

1. 如拆箱后没有转成原类型,编译时不会出错,但运行会出错。所以拆箱后转换类   型 一定要正确。

2.用GetType().ToString()判断时一定要使用类型全称,如:System.String 而不要用String

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值