C#的装箱和拆箱

装箱和拆箱是C#类型系统的核心。通过装相和拆箱操作,能够在值类型和引用类型中架起一座桥梁。换言之,可以轻松实现值类型与引用类型的互相转换。装箱和拆箱能够统一考察类型系统,任何类型的值最终都可以按照对象进行处理。

1.装箱

装箱的核心是把值类型转换为对象类型,或者转换为由值类型执行的接口类型。把一个值类型的值装箱,也就是创建一个对象并把这个值赋给这个对象。常见的装箱转换有4种:

·从任何值类型转换为对象类型;
·从任何值类型转换为System.ValueType类型;
·从任何值类型转换为值类型实现的任何接口类型;
·从任何枚举类型转换为System.Enum类型;

需要注意的是,装箱转换意味着复制一个欲被装箱的值。这与从引用类型转换为对象类型有着很大的不同。在后者中,转换后的值继续引用同一实例,只是将它当成对象类型而已。

下面举例说明装箱操作的实现:

int i = 100;
object obj = i;

2.拆箱

拆箱相对于装箱是一个相反的过程,其核心是将引用类型转换为值类型,或者是将一个接口类型转换为一个实现该接口的值类型。常见的拆箱操作有4种:

·从对象类型转换为任何值类型;
·从System.ValueType类型转换为任何值类型;
·从任何接口类型转换为实现该接口的任何值类型;
·从System.Enum类型转换为任何枚举类型;

拆箱的过程分为两个步骤:一是检查对象实例是否是给定的值类型的装箱值;二是将值从对象实例中复制出来。下面列举一个简单的拆箱操作实现。

int i = 100;
object obj = i;
int j = (int)obj;


摘自:郝刚.2006.《ASP.NET 2.0 开发指南》.人民邮电出版社.53~54

评论: 0 | 引用: 0 | 查看次数: 3730
发表评论
登录后再发表评论!