CLR Via C# 第五章(基元类型,引用类型与值类型)(2)——读书笔记
2016-05-24 21:04
561 查看
装箱与拆箱
值类型不需要再托管堆中分配,不被垃圾回收,不通过指针引用,但很多时候我们往往需要获取对值类型实例的引用
比如传一个值类型实例作为实参
然而形参有时确实Object类型
形如
Int32 a=0; Object obj=(Object )a;
这类操作称作装箱,即值类型换成引用类型。
装箱步骤
1.在托管堆中分配内存,分配的内存量是值类型各字段所需要的内存量再加上两个额外成员(类型对象指针+同步块索引)
2.值类型字段复制到新分配的堆内存。
3.返回对象地址,现在该地址是对象引用。
然而对于拆箱,
以
Point p; Arraylist a=new ArrayList(); a.Add(p); p=(Point)a[0];
最后一个语句为拆箱
则一个已装箱的对象中所有字段赋值到值类型p中,p在栈中
1.获取已装箱对象中各个Point字段地址,这步称为拆箱。
2.再讲字段包含的值从堆赋值到基于栈的值类型实例中。
可见装箱代价比较大,在代码中要避免重复装箱
相关文章推荐
- c#中Thread的基本使用
- 使用C#从TFS获取最新版本
- 30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
- VS2010+C#+EmguCV 配置详解
- [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)
- C# ORM框架 开源
- C# .NET4.0 改为 到.NET2.0 报错解决方法
- 用Ngen指令加快C#程序的启动速度
- csharp: DBNull and DateTime
- c#---delegate关键字
- C# Delegate(委托)与多线程
- datetime的使用技巧
- C#委托,事件理解入门 (译稿)
- C# winfrom 中 MediaPalyer 的所有属性及方法。
- c#程序打包、机器代码生成(Ngen.exe)
- WPF处理未捕获的异常
- C#开发中使用Npoi操作excel实例代码
- C#之xml存储中文乱码问题
- C# 十进制转十六进制
- C#之序列化数据二