C#之装箱与拆箱
装箱与拆箱
装箱和拆箱是C#类型系统的核心概念,是将值类型的数据转换为引用类型的数据,或者将引用类型数据转换成值类型的数据的操作。
这种相互转换可以在两类数据间建立一个等价连接,本质上,是将所有数据视为对象。
装箱转换
指将一个值类型数据隐式转换为Object类型,或者该值类型应用的接口类型interface-type将其装箱,也就是创建一个基于该值类型的Object实例的过程。
比如:将值类型变量chData的值赋予对象objData
Char chData = 'a'
Object objData =chData
Console.WriteLine(objData)
第二行的赋值暗示调用一个装箱操作,chData字符变量的值被复制给ojbData对象,字符变量和对象都同时存储在栈中,但是,对象ojbData的值却留在堆中。
拆箱转换
装箱转换的逆操作,指将一个对象类型显式的转换成一个值类型的数据,或者是将一个接口类型,显式的转换成一个执行该接口的值类型。
拆箱的过程分为两步,首先,需要检查对象实例,判断是否为给定的值类型的装箱,然后再将实例的值赋给值类型变量。
比如:一个简单的拆箱过程
Int intData = 5
Object objData = intData
Int intData2 = (int) objData
拆箱转换过程,与装箱过程相反。
注意,装箱转换和拆箱转换,必须遵循类型兼容原则,否则,会造成编译异常。