C#装箱拆箱

系统 1952 0

C#中的数据类型包括值类型、引用类型和指针类型,而指针类型只有在不安全代码中使用。值类型包括简单类型、结构和枚举,引用类型包括类、接口、委托、数组和字符串等。为了保证效率,值类型是在栈中分配内存,在声明时初始化才能使用,不能为NULL,而引用类型在堆中分配内存,初始化时默认为NULL。值类型超出作用范围系统自动释放内存,而引用类型是通过垃圾回收机制进行回收。由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以相互转换,而这转换过程也就是所谓的装箱和拆箱。
装箱转换
装箱就是将一个值型变量隐式地转换为引用类型对象,虽然也可以显示转换,但一般都不需要使用到。对值类型进行装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
例如:

class TestBoxing
{
static void Main()
{
int i = 123 ;
object o = i; // 隐式装箱
i = 456 ; // 改变i的内容
System.Console.WriteLine( " 值类型的值为 {0} " , i);
System.Console.WriteLine(
" 引用类型的值为 {0} " , o);
}

}

结果输出:
值类型的值为 456
引用类型的值为 123

装箱操作如下图所示
C#装箱拆箱
取消装箱
取消装箱就是从引用类型到值类型的显式转换。取消装箱操作先检查对象实例,确保它是给定值类型的一个装箱值,然后将该值从实例复制到值类型变量中。
例如:

class TestUnboxing
{
static void Main()
{
int i = 123 ;
object o = i; // 隐式装箱
try
{
int j = ( short ) o; // 试着取消装箱
System.Console.WriteLine( " 取消装箱成功. " );
}

catch (System.InvalidCastException e)
{
System.Console.WriteLine(
" {0} 错误: 不正确的取消装箱. " , e.Message);
}

}

}

结果输出:
指定的转换无效。错误:不正确的取消装箱。
要将int j = (short) o 改为int j = (int) o 就会显示取消装箱成功。

取消装箱如图所示:
C#装箱拆箱

在网上查资料的时候在CSDN上看到个解释装箱和拆箱的解释,如下所示:

// “小范围”变量int,“大范围”变量double
int a = 10 ;
double b;
b
= a; // 这叫装箱,“小”的放入“大”的,呵呵
int a;
double b = 10 ;
a
= ( int )b; // 这叫拆箱,“大”的放入“小”的,乱放或放错了可不行哈,呵呵


能把强制类型转换解释成装箱拆箱实在觉得很有趣,就做个反面的例子吧。

C#装箱拆箱


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论