<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="[基础]装箱拆箱1" id="card1">
<p> 游客</p><p>
标题:[基础]装箱拆箱1<br/>
正文:<br/>
.marginpadding{margin: 5px auto;padding:0px} 提问:首先我们来提两个疑问,我们自定义了一个类如Customclass类型,Customclass myclass=new Customclass()Object obj=myclass;运行上面这段代码,我们会进行装箱操作吗? 基础知识:.Net的类型分为两种，一种是值类型(Value Type )，另一种是引用类型(Reference Type)。这两个类型的本质区别，值类型数据是分配在栈中，而引用类型数据分配在堆上。那么如果要把一个值类型数据放到堆上，就需要装箱操作；反之，把一个放在堆上的值类型数据取出来，则需要进行拆箱操作。说到具体程序代码上, 我们可以这样总结: 装箱是将值类型转换为引用类型 ；拆箱是在已装箱的前提下将引用类型转换为值类型.我们要充分的了解装箱和拆箱,首先我们先得了解一下.net framework平台的类的构造.在这个平台上有一个万物之源,那就是System.Object类型,在之下系统又分了值类型(Value Type )和引用类型(Reference Type).值类型包括原类型（Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal）、枚举(enum)、结构(struct)，引用类型包括：类、数组、接口、委托、字符串等。所以到这里我们就可以得出一个结论,文章开头提的那个问题的答案也就不言而喻了.我们自定义声明的类型是一种引用类型,所以我们把他放到object里面的时候,是不会发生装箱操作的. 具体操作:下面我们来解析一下装箱和拆箱系统做了那些操作前面我们已经说到.值类型数据是分配在栈(stack)中,他是一个先进后出的结构,由编译器自动分配释放 ，存放函数的参数值，局部变量的值等.而引用类型数据分配在堆(heap)上,其操作方式类似于数据结构中的栈。堆他是一种顺序随意的结构,一般由程序员分配释放若程序员不释放，程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事，分配方式倒是类似于链表。具体在.net框架上的情况你可以阅读  .NET中栈和堆的比较 这篇文章,这位博主翻译了四篇关于这方面<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=311&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=311&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=311&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=311&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=311">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=311">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>