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方法重载以及类方法扩展是几个核心概念,对于理解和优化程序性能至关重要。本文将深入探讨这些主题,并通过具体的实例来阐述它们的应用。 1. 装箱与拆箱 装箱...
C#装箱与拆箱第一部分。是一个很好的视频,帮助大家学习C#装箱和拆箱的知识
C#中的装箱和拆箱是两种特殊类型的转换操作,它们涉及到值类型与引用类型之间的交互。在C#中,值类型包括基本类型(如int、char、bool等)和结构(如DateTime、Decimal等)。而引用类型主要是类实例以及接口实例。...
C#装箱和拆箱视频第二部分,可以结合第一部分的视频看。对初学者很有帮助
在实际开发中,理解数值类型、装箱拆箱以及类型转换对于编写高效、安全的代码至关重要。通过学习和实践,你可以更好地掌握这些概念,并避免潜在的性能问题和错误。为了深入理解这些知识点,阅读提供的"数据类型_4_值...
《深入理解C# 装箱和拆箱》 装箱和拆箱是C#编程中的关键概念,它们是C#类型系统与C/C++不同的一个重要体现。装箱和拆箱提供了一种桥梁,使得值类型和引用类型之间能够进行灵活的转换。这两种操作对于理解和优化C#...
1、以20个浮点类型字段,1百万条记录为测试数据 2、分别对比二进制与ProtoBuf序列化、反序列化、显示速度的耗时对比以及占用空间大小对比 3、在增加压缩功能后再进行序列化、反序列化、显示速度的耗时对比以及占用...
本文以一个简单实例讲述了C#装箱和拆箱操作的实现方法,简单来说装箱是将值类型转换为引用类型;拆箱是将引用类型转换为值类型,是涉及栈和堆的使用方面的东西,学过C#的人应该都知道,所以这里就不哆嗦了,本例代码...
在C#编程语言中,装箱与拆箱是两种关键的操作,它们涉及到值类型与引用类型之间的转换。本文将深入探讨这两个概念,以及它们在实际编程中的应用。 首先,我们来理解什么是装箱。装箱(Boxing)是指将值类型(如int...
【C# 装箱和拆箱】是C#编程中的关键概念,涉及到值类型与引用类型之间的转换。装箱是将值类型转换为引用类型,而拆箱则是将引用类型转换回值类型。这一机制使得C#能够处理不同类型之间的交互,尤其是在需要使用通用...
在C#编程语言中,装箱与拆箱是两种重要的操作,主要涉及到值类型与引用类型之间的转换。本文将深入探讨这两个概念,并结合实例来帮助理解。 首先,我们需要明确值类型(如int、bool、char、结构体等)和引用类型...
C#语言中的装箱和拆箱操作 C#语言中的装箱和拆箱操作是类型系统中的核心概念,它们使得在C#类型系统中任何值类型、引用类型和object对象类型之间进行转换。装箱和拆箱机制可以将任何类型的值看作是object类型。 ...
1、装箱和拆箱是一个抽象的概念 2、装箱是将值类型转换为引用类型 ; 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来 例如:...
浅析C# 装箱和拆箱 C# 中的装箱和拆箱是两个重要的概念,它们之间的转换涉及到存储上的变化,影响性能,需要避免装箱和拆箱操作。 一、装箱 装箱是将值类型转换为引用类型的过程。例如,int 类型的变量 i 赋值给 ...
在C#编程语言中,装箱(Boxing)和拆箱(Unboxing)是两个重要的概念,特别是对于理解和优化性能至关...通过观看"A212]C#语言参考视频 装箱拆箱.swf"这样的资源,初学者能够直观地理解这两个概念,并通过实例加深理解。
本文实例讲述了C#装箱和拆箱操作。分享给大家供大家参考,具体如下: 1. C#中的装箱 C#中的装箱就是把一个值类型隐式地转换为object类型,转换过程中采用的是值的拷贝而不是引用,这从下面的例子可以看出: using ...
在C#编程语言中,装箱(Boxing)和拆箱(Unboxing)是两种重要的操作,它们涉及到值类型(Value Types)与引用类型(Reference Types)之间的转换。值类型包括基本数据类型如int、char、bool等,以及结构体(Struct...
在.NET框架中,C#是一种面向对象的编程语言,它提供了装箱和拆箱的概念来处理值类型与引用类型之间的转换。本压缩包文件“C#源代码-装箱和拆箱.zip”显然包含了关于这一主题的源代码示例,这对于我们深入理解这两种...