首页 | 新闻资讯 | 软件应用 | 图形图像 | 网络应用 | 硬件学堂 | 程序开发 | 安全中心 | 素材下载 | 作者专区 | 学院论坛
精选专题 | 精美壁纸 | 专家答疑 | Flash剧场 | Photoshop | 名词解释 | 梦幻桌面 | PS高手进阶 | QQ区 | 图书 | 黑客教材
Flash教程| 卡通制作 | AutoCAD | 3DMax实例 | PS视频教程| 网页制作 | CorelDRAW| Firework | 滤镜与实例 | 全部视频教程
当前位置:eNet硅谷动力 > 学院频道 > 经验技巧

浅谈C#中所谓的 “值类型”
2008-07-04 09:12 来源:博客网
【简 介】
相信大家对于 "值类型" 并不陌生,因为它在我们代码设计中是不可缺少的,那么究竟什么是 "值类型" 呢? "值类型" 就是 我们用到的 Int16,Int32这些数值类型吗
    
加入收藏  设为首页

       在C#中,相信大家对于 "值类型" 并不陌生,因为它在我们代码设计中是不可缺少的,那么究竟什么是 "值类型" 呢? "值类型" 就是 我们用到的 Int16,Int32这些数值类型吗?
      我们知道在C#中所有的类型继承于System.Object根类型,这也就意味着就代码层面来讲,在C#中所有的类型都是Class,,即一切都是Class类型,既然全部都是Class类型,那么值类型在哪里呢?我们可以发现在C#中System.Int16,System.Int32,System.Boolean...等等这些常用的类型都是Struct 结构类型,那么结构类型是什么,下面我们定义一个结构,然后通过IL Disassemble 工具来查看编译的中间代码便可以得到结果.

public struct CustomerStruct

{

public string Name{get;set;}

}

   代码非常简单,我们就定义一个struct类型,并且包含一个Name属性.

C#

看到上面这幅图,相信大家都已经看到定义一个struct类型实际上编译把你所定义的类型继承了System.ValueType类型,换句话说,在C#中我们经常使用的System.Int16,System.Int32,System.Boolean..这些数值结构类型都是继承于System.ValueType类型,而System.ValueType又是继承于System.Object根类型,即验证我开始所讲到的在C#中一切类型都是Class。

      之所以存在"值类型" 这个概念,其实是因为C#中的某些类型有这特殊的地位(即继承于System.ValueType的类型),CLR会特殊的对待这些类型,

看下面这2行代码 
Int32 a = new System.Int32(10) ;

CustomerStruct customer = new CustomerStruct() ;

      首先为什么对于数值类型也可以使用 new 来进行内存分配呢? 上面已经讲到,因为他们都是Class类型,当然可以使用new 来进行内存分配.
      其次,CLR执行这样的代码的时,CLR 通过反射(有待考察)或者其他途径来获知所要请求分配内存的类型是否继承于System.ValueType如果是的话,那么就在栈上进行分配,如果不是的话,那么就是我们所说的引用类型,就在托管堆上分配内存以及栈上分配对应的引用变量,这些一切都是CLR做的工作.

我们再来看看装箱操作.
object o = new object();

Int32 aaa = 100;

o = aaa; //这里会发生装箱操作
我们都知道当CLR执行到 o = aaa;这条语句时会发生装箱操作,为什么会发生装箱操作呢?这是因为CLR 知道引用变量o所要引用的类型aaa是继承于System.ValueType类型的,继承于System.ValueType的类型都是在栈上分配的,而其它则是在托管堆上分配的,所以会CLR会弄得aaa的副本弄到托管堆上去,这一切也都是CLR的工作.

  由此我们可以得出结论:
   1.在C#中 就代码层面上讲 所有的类型都是Class类型.
  2.所谓的 "值类型" != 数值类型,而是所有继承于System.ValueType 的类型.
  3."值类型" 得到的语言级别的支持,CLR知道如何对 "值类型" 这样的Class类型进行内存分配和处理.
  
     综上所述.个人愚见,有什么不对的地方希望大家帮忙指出,共同学习,共同进步.


【责任编辑 王凡】

关键字: 编程  开发  技巧  数据 
您对这篇文章的看法是:    喜欢 反感 支持 反对 加油 鄙视 学习 打击 佩服 漂亮 路过 发表评论
视频教程】 【专题汇总】 【不懂就问我关闭窗口

Photoshop打造乒乓球男团胜利瞬间
Flash制作可爱“小青蛙时钟”动画
震撼潮流 JOOP 08秋冬少女装设计
强强联手 谷歌金山词霸重拳出击
微软承认番茄花园作者被源于其投诉
焦点文章
 本栏目最新文章
·教你本地安装、运行、调试PHP程序
·浅谈C#中所谓的 “值类型”
·ASP.NET 全局异常处理的方法
·编程实例 Ajax的基本实现方法
·ASP.NET技术的学习顺序问题
 精彩回放
·3DSMAX打造书本翻开效果
·共享上网技巧应用四则
·陪酒女浸泡在酒里的青春
·美女的性感靓丽婚纱设计
·妖冶身姿 死或生3壁纸
·剿灭Win XP下的29个烦恼
·黑客必备 NET命令大全
·用PS制作精致绝伦的红酒
 精彩推荐
 今日软件下载
·企业级即时通信平台 腾讯通RTX
·极品时刻表含春运临时列车数据
·下载管理器 BitComet 比特彗星
·边下边看想看就看风行网络电影
·超级图文影音转换器 Konvertor
 往日推荐
·手工破解网吧多种限制
·Windows 网络管理技巧
·WMP 10使用技巧三则
·女孩问你帅不帅 要小心
·注册表优化XP 20招
·制作XP万能ghost光盘
·WMP10火拼DVD播放器
·街头霸王图片集中营
·五大搜索引擎横向评测
·防御计算机病毒十大步骤

论坛精华
·Photoshop CS3打造迷 
·ps教程:照片转红色仿 
·史上最强最多 photo 
·《古典写实美女》漫 
·eNet学院史上最优秀 
·Photoshop经典教程集 
热点推荐
打造绚丽北极光
麻辣动态签名
Flash视频编程
章子怡月历桌面
热点关注
·误杀游戏 厂商大战一触即发
·SEO从入门到精通视频教程
·Photoshop数码照片处理案例
·3DSMAX室内渲染实例视频教程
·鹏哥特色教程之C#入门到精通
·Dreamwaver CS3 视频教程
·JAVA-J2ME移动开发实战教学
·爱淘课局域网基础视频教程
·瑞星卡卡上网助手 正版免费
Photoshop把照片处理成逼真水墨画
往日推荐
打造火焰文字
鹏哥C#教程
美女怀旧照片
3D室内渲染
焦点关注