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
取消装箱
取消装箱就是从引用类型到值类型的显式转换。取消装箱操作先检查对象实例,确保它是给定值类型的一个装箱值,然后将该值从实例复制到值类型变量中。
例如:
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 就会显示取消装箱成功。
在网上查资料的时候在CSDN上看到个解释装箱和拆箱的解释,如下所示:
//“小范围”变量int,“大范围”变量double
int a=10;
double b;
b=a; //这叫装箱,“小”的放入“大”的,呵呵
int a;
double b=10;
a=(int)b; //这叫拆箱,“大”的放入“小”的,乱放或放错了可不行哈,呵呵
能把强制类型转换解释成装箱拆箱实在觉得很有趣,就做个反面的例子吧。
分享到:
相关推荐
C#示例:装箱、拆箱、自定义数据类型转换、ToString方法重载、类方法扩展。 源代码(工程)
C#装箱与拆箱第一部分。是一个很好的视频,帮助大家学习C#装箱和拆箱的知识
本篇文章主要介绍了C#的装箱和拆箱的知识点回顾,对大家的学习和复习具有很好的参考价值,需要的朋友一起来看下吧
C#装箱和拆箱视频第二部分,可以结合第一部分的视频看。对初学者很有帮助
装箱(boxing)和拆箱(unboxing)是C#类型系统的核心概念.是不同于C与C++的新概念!,通过装箱和拆箱操作,能够在值类型和引用类型中架起一做桥梁.换言之,可以轻松的实现值类型与引用类型的互相转换,装箱和拆箱能够...
c#的数值类型还有装换和重要的装箱和拆箱,以及实例,很不错的哦
1、以20个浮点类型字段,1百万条记录为测试数据 2、分别对比二进制与ProtoBuf序列化、反序列化、显示速度的耗时对比以及占用空间大小对比 3、在增加压缩功能后再进行序列化、反序列化、显示速度的耗时对比以及占用...
本文以一个简单实例讲述了C#装箱和拆箱操作的实现方法,简单来说装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型,是涉及栈和堆的使用方面的东西,学过C#的人应该都知道,所以这里就不哆嗦了,本例代码...
1、装箱和拆箱是一个抽象的概念 2、装箱是将值类型转换为引用类型 ; 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来 例如:...
C#语言中的装箱和拆箱操作,很全面的理解装箱和拆箱操作
C#中必备知识点 装箱与拆箱(2)
本文实例讲述了C#装箱和拆箱操作。分享给大家供大家参考,具体如下: 1. C#中的装箱 C#中的装箱就是把一个值类型隐式地转换为object类型,转换过程中采用的是值的拷贝而不是引用,这从下面的例子可以看出: using ...
通过图例主要介绍了C#装箱和拆箱原理,内容很简单,感兴趣的小伙伴们可以参考一下
都知道C#有装箱和拆箱的操作,听闻也都是讲int类型转换成object类型就是装箱,将object类型再转回int类型就是拆箱。 描述的通俗点: 装箱 将值类型转换成引用类型, 拆箱 将引用类型转换成值类型。 那看来是要先...
讲解C#装箱相关问题,适合C#初学者的学习。
C#中重要的,必备知识点
主要介绍了C# 装箱和拆箱的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下