基元类型和FCL类型
FCL类型就是指Int32这种类型,这是CLR支持的类型。
而基元类型就是指int这种类型,这是C#编译器支持的,实际上在编译后,还是会被转为Int32类型。
而且学过C的朋友肯定记得,int在32位机器和64位机器字节数可能不同,但是C#.NET里int就是表示Int32。
因为在基元类型和FCL类型之间,有一个一一对应的映射关系。另外注意dynamic实际上对应的类型就是Object,只是说C#编译器允许用简单的语法让dynamic变量参与动态调度。
表达式由字面量构成,编译器在编译的时候就能完成表达式求值
Boolean found=false;//生成的代码将found设为0 Int32 x=100+20+3;//x设为123 String a="a"+"bc";//s设为“abc”
checked和unchecked基元类型操作
此指令就用来检查溢出和不检查溢出,而默认是unchecked,不过这个可以改。检查溢出就报异常,不检查溢出就回滚。
引用类型和值类型
所谓值类型的去看它们类型的定义,比如Int32和DayOfWeek都是struct和enum类型,而struct类型实际上派生自System.ValueType类型,而Enum类型派生自System.Enum类型。而Enum类型最终还是派生自System.ValueType类型。
好吧,他们俩个的差异性其实还是蛮多的,不过基本上这是最基础的了,而且基本上是本书就讲,所以反而懒得写了。
装箱与拆箱
装箱就是把本来在栈中的值类型,在堆中新开辟一个内存空间,把值类型的数据复制进去,并增加引用类型都有的类型指针和同步块索引,然后返回这个内存空间引用地址。
拆箱就是反过来,先获取装箱对象中各个字段的地址,再将这些字段包含的值从堆复制到栈。
由上面看出装箱拆箱其实很影响效率,所以写代码的时候应该避免。
——未完待续
原文:http://www.cnblogs.com/vvjiang/p/5240620.html