值类型、引用类型、堆栈、封箱、拆箱哪位能帮我详细解答一下,谢谢!

解决方案 »

  1.   

    http://topic.csdn.net/t/20040103/05/2628435.html
      

  2.   

    值类型:
    (Value Type),值类型实例通常分配在线程的堆栈(stack)上,并且不包含任何指向实例数据的指针,因为变量本身就包含了其实例数据。其在MSDN的定义为值类型直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中。我们由上图可知,值类型主要包括简单类型、结构体类型和枚举类型等。通常声明为以下类型:int、char、float、long、bool、double、struct、enum、short、byte、decimal、sbyte、uint、ulong、ushort等时,该变量即为值类型。 
    引用类型:
    (Reference Type),引用类型实例分配在托管堆(managed heap)上,变量保存了实例数据的内存引用。其在MSDN中的定义为引用类型存储对值的内存地址的引用,位于堆上。我们由上图可知,引用类型可以是自描述类型、指针类型或接口类型。而自描述类型进一步细分成数组和类类型。类类型是则可以是用户定义的类、装箱的值类型和委托。通常声明为以下类型:class、interface、delegate、object、string以及其他的自定义引用类型时,该变量即为引用类型。 
    栈区:
    (stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈
    堆区:
    (heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
    装箱,拆箱:
    值类型实例到对象的转换,它暗示在运行时实例将携带完整的类型信息,并在堆中分配。Microsoft 中间语言 (MSIL) 指令集的 box 指令,通过复制值类型,并将它嵌入到新分配的对象中,将值类型转换为对象拆箱:
      

  3.   

    装箱:就是把值类型转换为引用类型
    例:
      int i=2;
      object o=i;拆箱:就是把引用类型转换为值类型
    例:
      int i=2;
      object o=i;
      int j=(int)o;建议楼主看看《C#高级编程》
    基础概念讲的很详细
      

  4.   

    http://bbs.langsin.com/viewthread.php?tid=1925&extra=page%3D1
    这里全都讲有