你的位置:首页 > ASP.net教程

[ASP.net教程]【C#进阶系列】05 基元类型、引用类型和值类型


 基元类型和FCL类型

FCL类型就是指Int32这种类型,这是CLR支持的类型。

而基元类型就是指int这种类型,这是C#编译器支持的,实际上在编译后,还是会被转为Int32类型。

而且学过C的朋友肯定记得,int在32位机器和64位机器字节数可能不同,但是C#.NET里int就是表示Int32。

因为在基元类型和FCL类型之间,有一个一一对应的映射关系。另外注意dynamic实际上对应的类型就是Object,只是说C#编译器允许用简单的语法让dynamic变量参与动态调度。

表达式由字面量构成,编译器在编译的时候就能完成表达式求值

Boolean found=false;//生成的代码将found设为0Int32 x=100+20+3;//x设为123String a="a"+"bc";//s设为“abc”

checked和unchecked基元类型操作

此指令就用来检查溢出和不检查溢出,而默认是unchecked,不过这个可以改。检查溢出就报异常,不检查溢出就回滚。

引用类型和值类型

所谓值类型的去看它们类型的定义,比如Int32和DayOfWeek都是struct和enum类型,而struct类型实际上派生自System.ValueType类型,而Enum类型派生自System.Enum类型。而Enum类型最终还是派生自System.ValueType类型。

好吧,他们俩个的差异性其实还是蛮多的,不过基本上这是最基础的了,而且基本上是本书就讲,所以反而懒得写了。

装箱与拆箱

装箱就是把本来在栈中的值类型,在堆中新开辟一个内存空间,把值类型的数据复制进去,并增加引用类型都有的类型指针和同步块索引,然后返回这个内存空间引用地址。

拆箱就是反过来,先获取装箱对象中各个字段的地址,再将这些字段包含的值从堆复制到栈。

由上面看出装箱拆箱其实很影响效率,所以写代码的时候应该避免。

——未完待续