首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > 关于.NET中的值类型和引用类型
【标  题】:关于.NET中的值类型和引用类型
【关键字】:.NET
【来  源】:http://blog.csdn.net/hlbd_edu/archive/2006/12/13/1441633.aspx

关于.NET中的值类型和引用类型

关于.NET中的值类型和引用类型
        .NET中的值类型和引用类型,这是一个最基础的问题,我也一直以为自己是知道的,所以也没有深究。直到前几仔细一看,才陡然明白,原来自己一直到不知道值类型和引用类型的本质。
        目前市面上可见的大部分教授C#的书籍都会首先讲解数据类型,而且往往都会告诉大家:值类型是存在堆栈里面的,引用类型是存在堆里面的。 
        我个人认为,这个必须要从.NET的一个执行机制来看。.NET的程序首先被编译为IL程序,然后再托管执行。这个时候给值类型和引用类型的内存分配是不一样的。值类型直接从堆栈里面取值就可以了,引用类型必须要先从堆栈里面取出它的地址,再根据这个地址到堆里面找到对应的值。
        这就引出了一个问题,int是典型的值类型,class是典型的引用类型,如果我在一个class里面,有诸如int i=0;的语句,那么变量i究竟是存在堆里面还是堆栈里面?
        这个问题可以这样来解释,因为class是引用类型,所以一开始的时候i肯定是存在堆里面的,但是,当执行的时候,IL会把i取到堆栈里面。
        说到引用类型和值类型,就不得不提到Boxing和Unboxing,基本上进行.NET编程的同学们都知道Boxing是把值类型装箱成引用类型,Unboxing是把引用类型拆箱成值类型,但是为什么一定只能拆箱回原有的数据类型呢?
        这个问题,又绕回来了,还是内存分配的问题。装箱是把值类型从堆栈里面取出来,包装一下,作为引用类型存到堆里面去,装箱是把这个包装过的引用类型,从堆里面拿出来,去掉那些包装,把它放回到堆栈里面去。既然这样,中间肯定存在一个内存分配的问题,所以,必须要是原来的类型,否则内存分配不就乱了么?这也能够解释,为什么在我们编程的时候被要求尽量少装箱拆箱,因为这样装来拆去真的是耗时耗力,影响效率。 
ASP.NET中如何让textbox内部的文字右对齐:【上一篇】
.NET显示gif文件:【下一篇】
【相关文章】
  • ASP.NET中如何让textbox内部的文字右对齐
  • 在.NET程序中小心使用String类型
  • 升级MFC到.NET之一:CFont转换为Font
  • windows64位技术---.NET FrameWork代码的64位移植及与Native代码的交互(四)
  • ASP.NET AJAX Client Framework 源码追踪 3 程序的入口点
  • .NET开源社区存在的问题
  • 疑难杂症:在ASP.NET AJAX中别使用<xhtmlConformance mode="Legacy"/>
  • TreeView 控件与Vs2005(Asp.Net 2.0)
  • [ASP.NET2.0]無法開啟報表12/12
  • .NET Framework 开发员指南 对象池
  • 【随机文章】
  • 调查:SharePoint头痛症状收集
  • WTK 模拟器字体的修改
  • 验证码的生成
  • Oracle9i新特点:SPFILE的使用
  • 慎用正则的test方法
  • configurate vsftp server
  • Servlets的过滤器
  • SIP Servlet 示例之 Call Screen
  • 精妙的 SQL 语句
  • ERP、单证和无纸化
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.