请用通俗点讲解下C#中装箱拆箱概念,不太理解啊!谢谢

解决方案 »

  1.   

    int a = 3;
    object c = a;//装箱int b = (int)c;//拆箱代码形式上就是这样的。 
    从原理上来说,是值类型和引用类型的内存分配不一样。 
    int 这样的值类型可以说是没有指针的,就是在栈上开辟一段空间,把值放进去。
    object 这样的引用类型,是在栈上分配指针,指向堆中的一段内存,这段内存才是真正的数据。
    比如一个int变成 object 的话,就需要在在堆上创建一段内存空间,把int值存入,然后在栈上存入这个堆的地址
    一个object变为int,反过来,需要先从堆中读取数据,然后在栈上存入这个数值。所以装箱和拆箱操作过于频繁,会导致频繁的在堆栈上的操作,浪费CPU,浪费内存。泛型的集合类出现,基本解决了这样的问题,基本不需要类型转化,对应的,装箱和拆箱也大规模的减少。
      

  2.   

    用.net框架程序集设置书里的一个例子来说说
    ArrayList.Add(object obj);
    接受一个object类型的参数 现在你传一个int类型的参数比如是 i 进去
    可是这个方法接受的是一个引用类型的object你传进去的是一个值类型的 i
    为了达到类型匹配,.net就通过一种叫做装箱的机制来处理这样的问题
    就是说你必须把 i 这个参数给我包装一下不然我不认,怎么包装就是装箱了
    不是太形象 o(∩_∩)o...哈哈
      

  3.   

    值类型转换类类型->装箱 object obj = (object)其他任何值类型
    拆箱是把类类型即引用类型,转换为值类型,但引用类型转换值类型的格式要正确.如:int i = (int)引用类型