C#基元类型、引用类型和值类型

    编译器直接支持的数据类型称为基元类型。基元类型直接映射到Framework类库(FCL)中存在的类型,好比:int直接映射到System.Int32类型。再好比许多开发人员都困惑到底应该使用string仍是String,其实做为基元类型的string也是映射到System.String的,因此二者是没有区别,均可以使用。 编程

    C#语言规范称:从风格上最好使用关键字,而不是完整的系统名称。可是许多大牛却更愿意使用FCL类型名称,并避免使用基元类型名称,这样能够避免映射的这个过程。安全

    C#在作类型转化的时候,若是在安全的状况下,自行作隐式转型,在不安全的状况下,须要显示转化。所谓安全,是指不会发生数据丢失的状况,如:int32转int64.不安全意味着转换以后,有可能失去精度或数量级,如int32转int64.编程语言

    CLR支持两种类型:引用类型和值类型。工具

    值类型的装箱和拆箱。值类型是比引用类型更“轻型”的一种类型,由于他们不做为对象在托管中分配,也不会被垃圾回收,也不经过指针来引用。将值类型转换成引用类型须要装箱(boxing)。装箱会形成在托管堆上的内存分配,这会形成更频繁的垃圾回收,从而损害应用程序的性能。拆箱的代价比装箱低得多,其实就是获取一个指针的过程,该指针包含在一个对象中的原始值类型。性能

    可使用ILDasm.exe这样的一个工具来查看方法的IL代码,观察box这个IL指令会在哪里出现。指针

    FCL心在包含一组新的泛型集合类,它们使非泛型的集合类称为“昨日黄花”,例如,应该使用System.Collections.Generic.List<T>类,而不要使用System.Collections.ArrayList类,这里泛型集合类的最大一个加强就是泛型集合类容许开发人员在操做值类型的集合时不须要对集合中的项进行装箱/拆箱处理。对象

    C#是一种类型安全的编程语言。主要讲一下dynamic基元类型,基元类型object和dynamic都映射到FCL中的System.Object。任何表达式都能隐式转型为dynamic,由于全部表达式最终都会生成一个从Object派生的类型。编译器不容许将表达式从Object隐式转型为其余类型,必须使用显示转型。然而编译器却容许使用隐式转型语法将一个表达式从dynamic转型为其余类型。如:Objcet o=123;Int32 n1=o;就是错误的,必须Int32 n1=(Int32)o;显示转化才ok。而dynamic d1=123;Int32 n3=d1;就能够这样隐式转化。内存

相关文章
相关标签/搜索