一、基元类型:编译器直接支持的数据类型称为基元类型(如int类型其对于的是system。int32)。
二、类型溢出,可以用checked 和unchecked进行类型溢出检查和不进行类型溢出检查。一个奇怪的问题,2个byte类型相加的结果居然是个int类型。如果原因是在clr(clr只在32位何64位进行算术运算)中计算时,要把byte类型先转换为32位的int类型在相加,所以导致2个byte类型相加的结果是int类型;
一个诡异的问题 :如 a、b是byte类型 b+=a;则不会出错。
三、所以的值计算都有对应的 System.Decimal是一个特殊的类型,clr没有直接操作Decimal的值的IL代码,如果对decimal的值操作没有安全的执行,总是跑出system.overflowexception的异常,不管是否使用unckeck或者check。

四、值类型、引用类型;
值类型:直接或者间接继承自system.valueType。值类型总是从栈分配内存。
引用类型:总是从托管堆中分配内存,new返回的是对象位于托管堆中的内存地址。该地址执行对象占用的数据位。

实例化一个引用类型包必须分配2个地址。一个是数据保存的真实地址,一个是指向该真实数据的地址。

装箱:把值类型转换为引用类型。先从托管堆中为新生成的引用类型分配内存,内存大小为值类型本身的大小,再加上额外的信息(即2个附件成员,一个是指向该内存的地址的引用地址,一个是SyanBlockIndex,用于进程操作,资源释放标志物)。再将值类型拷贝到分配的空间上,在返回该值地址的语言。

拆箱:把引用类型转换为值类型。如果该引用为空,抛出NullReferenceException。如果该引用对象不是一个期望的值类型,抛出一个InvalidCstException的异常。最后返回一个保护在装箱中值类型所在真实地址的指针。

五、在一个方法体中,如果该对象是一个值类型。如果其调用的方法是引用类型的方法,该对象必须先转换为引用类型(发生装箱操作),然后再调用引用类型的方法。如果其掉用的是值类型的方法,就不会发生装箱操作。如果一个值类型调用一个引用类型的方法两次,只有在第一次调用时引发装箱操作。第二次的时候直接在托管堆中调用第一次已装箱的对象。

转载于:https://www.cnblogs.com/gowhy/archive/2011/04/07/2007419.html

第五章 基元类型、引用类型、值类型 CLR学习第五课相关推荐

  1. 第五章 基元类型,引用类型和值类型

    目录 5.1 编程语言的基元类型 5.2 引用类型和值类型 5.3 值类型的装箱和拆箱 5.4 对象哈希码 5.5 dynamic基元类型 5.1 编程语言的基元类型 编译器直接支持的数据类型称为基元 ...

  2. 《.NET框架程序设计》第5章 基元类型、引用类型与值类型

    5.1 基元类型 基元类型可以用快捷语法.比如int a=0;等同于System.Int32 a=new System.Int32(); 建议,使用全名,为了代码含义看起来更清晰. 5.1.1 Che ...

  3. [No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1

    引言 本文之初的目的是讲述设计模式中的 Prototype(原型)模式,但是如果想较清楚地弄明白这个模式,需要了解对象克隆(Object Clone),Clone其实也就是对象复制.复制又分为了浅度复 ...

  4. ext如何将值存入变量_变量类型之值类型与引用类型

    前言 变量类型在我们日常开发中经常接触到,但是js中的变量类型与其他强类型语言不同,由于js是弱类型语言,因此他的变量拷贝在我们实际的日常开发中有很多需要注意的项.而半斤在最近的开发中遇到了很多匪夷所 ...

  5. C#的两种类据类型:值类型和引用类型

    目录 什么是值类型,什么是引用类型 概念: 值类型和引用类型区别 什么是值类型,什么是引用类型 概念: 值类型直接存储其值,而引用类型存储对其值的引用.部署:托管堆上部署了所有引用类型. 引用类型:基 ...

  6. C#中的变量类型(值类型、引用类型)

    C#中的变量类型: 值类型:值类型直接存储的是变量的值,变量空间在栈上分配,分配速度比较快.给变量赋值时需注意变量类型的取值范围,给变量赋不合理的值会导致编译器报错.布尔类型的变量只有两种可选择的值t ...

  7. 190111- Dartmouth COCS1 【第五章:参数、返回值和范围】

    失踪人口回归,没想到之前的居然真的有人看,有点开心~ 现在考试和申请都基本结束了,好好继续学习! 今天进度比较少,只看了[第五章:参数.返回值和范围],还是只写新学和觉得需要注意的,基础用法就不提了 ...

  8. ppt_第十五章_元基模拟染色体新陈代谢催化编码

    第十五章_元基模拟染色体新陈代谢催化编码 定义:元基的 新陈代谢一般指 源码工程的函数文件 进行元基编码后的 内容逻辑 接口和类 索引优化方式,主要体现在 文件 的分类,剔除,继承,分配. 定义:元基 ...

  9. 关于C#值类型,引用类型,值传递,引用传递

    说到参数传递,必须得弄清值类型和引用类型: (为了容易表达,我暂且命名存放在堆中的内容为堆中对象,存放在栈上的内容为栈中对象.) 值类型存放在栈中,直接访问.如果有:int a=0;int b=a;就 ...

最新文章

  1. linux root权限_深入了解 Linux 权限
  2. 朱俊彦团队提出GAN压缩算法:计算量减少20倍,生成效果不变,GPU、CPU统统能加速...
  3. 北京内推 | 微软亚洲研究院机器学习组招聘AI for Health实习生
  4. html异形轮播,异形滚动
  5. 工时单位天与人天的区别?
  6. java8实战怎么样_Java8中你可能不知道的一些地方之Stream实战
  7. 统计学基础学习笔记:正态分布
  8. AE还是AO了开发小结!!!!!至今没搞懂我用的是AE还是AO
  9. 堆排序算法(C#实现)
  10. java毕业设计校园闲置物品租售系统mybatis+源码+调试部署+系统+数据库+lw
  11. 【原创】超级详细的iPhone铃声制作、导入、设置全过程教程
  12. 抖音一姐直播笑唱国歌被封,网友:早就该封了!
  13. 极域教室老师版,控制同学电脑
  14. arduino 328P的BootLoader
  15. VMware 安装 CentOS 8.0
  16. 基于auto.js微信点赞
  17. 快快来,和我们一起开启稳定性的探索之旅
  18. 【微信退款】同一订单第二次无法退款
  19. TortoiseGit使用教程
  20. 测绘技术设计规定最新版_测绘技术设计的依据及规定.doc

热门文章

  1. 服务框架及服务治理组件——业界调研
  2. 稳定和性能如何兼顾?58大数据平台的技术演进与实践
  3. 在Exchange 2010中重建Exchange安全组
  4. mysql query cache
  5. linux ssh密钥登录配置
  6. 瞧瞧UC浏览器对CSS样式的“关怀”
  7. 汇编调用c函数为什么要设置栈
  8. ISA之三种客户端访问
  9. C# 2.0对现有语法的改进
  10. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)