.Net装箱拆箱编程实例
来源:互联网 发布:旋风十一人网络更新 编辑:程序博客网 时间:2024/06/07 19:41
.Net装箱拆箱编程实例
装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。
利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来。
由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以通过显式(或隐式)操作相互转换,而这转换过程也就是装箱(boxing)和拆箱(unboxing)过程。
二
装箱是将值类型转换为 object 类型或由此值类型实现的任何接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型。装箱是隐式的;取消装箱是显式的。装箱和取消装箱的概念是类型系统 C# 统一视图的基础,其中任一类型的值都被视为一个对象。
相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个新对象。取消装箱所需的强制转换也需要进行大量的计算,只是程度较轻。
装箱用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。
取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:
检查对象实例,以确保它是给定值类型的装箱值。
将该值从实例复制到值类型变量中。
三 编程实例
1 演示正常的装箱拆箱
using System;
// boxing.cs
// Boxing an integer variable
class TestBoxing
{
public static void Main()
{
int i = 123;
object o = i; // Implicit boxing
i = 456; // Change the contents of i
Console.WriteLine("The value-type value = {0}", i);
Console.WriteLine("The object-type value = {0}", o);
//装箱和取消装箱操作:
int i2 = 123; // A value type
object box = i2; // Boxing
int j2 = (int)box; // Unboxing
Console.WriteLine(box);
Console.WriteLine(j2);
Console.Write("按任意键继续 . . . ");
Console.ReadKey(true);
}
}
运行截图;
2 正常的装箱拆箱和拆箱发生异常时捕获到异常
using System;
public class UnboxingTest
{
public static void Main()
{
int intI = 123;
// Boxing
object o = intI;
// Reference to incompatible object produces InvalidCastException
try
{
int intJ = (short) o;
//int intJ = (int) o;
Console.WriteLine("Unboxing OK.");
Console.Write("按任意键继续 . . . ");
Console.ReadKey(true);
}
catch (InvalidCastException e)
{
Console.WriteLine("{0} Error: Incorrect unboxing.",e);
Console.Write("按任意键继续 . . . ");
Console.ReadKey(true);
}
}
}
上述程序分别把上面一句 int intJ定义语句和下面一句int intJ定义语句注释掉的运行截图分别如下;
工程源码:
http://pan.baidu.com/s/1dDs7jdn
- .Net装箱拆箱编程实例
- .net 装箱与拆箱
- .net装箱和拆箱
- .Net中的装箱拆箱
- 装箱和拆箱实例深入解析
- 拆箱与装箱的简单实例
- .NET的装箱与拆箱内幕
- 装箱和拆箱(boxing&unboxing)-.NET
- 《深入理解java虚拟机》自动装箱拆箱实例
- 《深入理解java虚拟机》自动装箱拆箱实例
- .NET中装箱拆箱与JAVA的异同
- 浅谈.NET中的类型和装箱/拆箱原理
- 浅谈.NET中的类型和装箱/拆箱原理
- Java编程之自动装箱与拆箱
- c#基础语言编程-装箱和拆箱
- C#装箱拆箱
- 装箱和拆箱
- 装箱和拆箱
- PHP核心技术与最佳实践之对象的序列化
- 177858941888172554
- oracle connect by用法
- 清除PLSQL Developer访问数据库历史记录
- 定时执行任务三种方式
- .Net装箱拆箱编程实例
- Yii CDbCriteria的常用方法
- CentOS 6.3下rsync服务器的安装与配置
- HDMI 图眼
- 车牌识别C语言源码 第一版
- 深入Java虚拟机笔记--体系结构及其堆,栈,方法区
- 设计模式--代理模式
- MFC中BOOL和bool的区别大不大
- http keep-Alive