装箱拆箱
来源:互联网 发布:复杂网络的统计特征 编辑:程序博客网 时间:2024/04/30 21:00
装箱拆箱
我原来对于装拆箱的理解只是停留在将值类型转化为Object类型,然后再转换回来。实际上,在这个看似简单的问题上还有一层更深的含义。
值类型和引用类型在实例化的时候是存储在不同的空间中的,值类型存储在Stack上,而引用类型是存储在Heap上,在装箱的过程中实际上是将在Stack上的值类型对象拷贝到Heap上,并以引用对象的存储格式保存,在这个过程中对所转换的引用类型对象进行修改操作,Stack上的值类型对象是不会变化的。而拆箱是将引用对象的值在拷贝回Stack上。
下面我们来看一个例子:
首先需要一个值类型,让它继承自一个接口
public interface IAdjustor
{
void Adjust();
}
public struct Size : IAdjustor
{
public int height;
public int weight;
public void Adjust()
{
height += 2;
weight += 3;
}
}
然后,再用ClientApp测试一下:
class Program
{
static void Main(string[] args)
{
Size s = new Size();
s.Adjust();
Console.WriteLine("height:" + s.height + " weight:" + s.weight);
IAdjustor itf = s; //In box
itf.Adjust();
Console.WriteLine("height:" + s.height + " weight:" + s.weight);
s = (Size)itf; //Un box
Console.WriteLine("height:" + s.height + " weight:" + s.weight);
Console.Read();
}
}
输出结果如下:
height:2 weight:3
height:2 weight:3
height:4 weight:6
从结果不难看出,在装箱后IAdjustor itf = s,调用已为引用对象的Adjust()方法,相应的值类型对象并没有发生变化。在拆箱后s = (Size)itf;,值类型对象就变化了
- C#装箱拆箱
- 装箱和拆箱
- 装箱和拆箱
- 拆箱与装箱
- 装箱拆箱笔记
- 装箱拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱与拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 装箱和拆箱
- 转:装箱拆箱
- 装箱与拆箱
- C#装箱拆箱
- shell编程笔记(四)
- 热烈庆祝中华人民共和国建国五十八周年1949.10.1--2007.10.1
- 判断一个string是否可以为数字
- 六顶思考帽,如何用才能恰到好处
- 某外企SQL Server面试题(英文,答案)
- 装箱拆箱
- 优秀js开源框架-jQuery使用手册(3)
- WEB2.0的市场驱动力
- 简单的Delegate(委托)例子
- 三层体系结构
- VBS脚本病毒特点及如何防范
- java开发登陆界面时比较数据库字符窜的问题
- GPS设计全攻略
- 第一个VB程序 呵呵,很弱智