装箱拆箱

原创 2007年10月01日 10:29: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;,值类型对象就变化了
 

相关文章推荐

装箱与拆箱(一)

  • 2007年12月27日 14:28
  • 6.24MB
  • 下载

C# 值类型、引用类型、装箱和拆箱、变量和常量

c#的值类型可以分为以下几种: ●简单类型(Simple types) ●结构类型(Struct types) ●枚举类型(Enumeration types) 简单类型 ...

C# struct 装箱拆箱例子

值类型:拆箱、装箱 struct是值类型struct和class的区别 类是引用类型,struct是值类型 在托管堆上创建类的实例,在栈上创建struct实例 类实例的赋值,赋的是引用地址,stru...
  • myinc
  • myinc
  • 2017年01月21日 21:39
  • 274

装箱与拆箱(二)

  • 2007年12月27日 14:29
  • 5.78MB
  • 下载

c#数值类型,转换和装箱拆箱

  • 2011年09月19日 19:32
  • 1.29MB
  • 下载

Java自动装箱与拆箱及其陷阱

在本文中,笔者向大家介绍下Java中一个非常重要也非常有趣的特性,就是自动装箱与拆箱,并从源码中解读自动装箱与拆箱的原理,同时这种特性也留有一个陷阱。开发者如果不注意,就会很容易跌入这个陷阱。 ...

C#语言中的装箱和拆箱操作

  • 2010年10月16日 21:42
  • 32KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:装箱拆箱
举报原因:
原因补充:

(最多只允许输入30个字)