zoukankan      html  css  js  c++  java
  • C# 基元类型

    C#编程中,初始化一个整数有两种方式:

    (1)、较繁琐的方法,代码如下:

    Int32 a = new Int32();

    (2)、极简的方法,代码如下:

    int a=0;

    对比两种方法,分析如下:

    第一种:过于繁琐,但是是标准的初始化一个整数的方式

    第二种:增强代码可读性,且生成的IL代码与使用第一种方式的一样.支持这种方式声明的数据类型统称为"基元类型"。

    "基元类型"直接映射到Framework(FCL)中存在的类型。如:在用"基元类型"int初始化一个整数时,int会直接映射到FCL中System.Int32类型,这个过程,编译器自动完成.

    于是就有了下面4行代码:

    int a = 0;  //最简单的方式
    System.Int32 b = 0; //简单的方式
    int c = new int(); //不方便的方式
    System.Int32 d=new Int32();  //最不方便的方式

    上面4中不同的初始化一个整数的方式,生成了完全相同的IL代码:

    .method private hidebysig static void Main(string[] args) cil managed
    {
        .entrypoint
        .maxstack 1
        .locals init (
            [0] int32 num,
            [1] int32 num2,
            [2] int32 num3,
            [3] int32 num4)
        L_0000: nop 
        L_0001: ldc.i4.0 
        L_0002: stloc.0 
        L_0003: ldc.i4.0 
        L_0004: stloc.1 
        L_0005: ldc.i4.0 
        L_0006: stloc.2 
        L_0007: ldc.i4.0 
        L_0008: stloc.3 
        L_0009: ret 
    }

    下面是C#中的所有基元类型,以及基元类型对应的Framework(FCL)中的FCL类型,以及当前基元类型的CLS(公共语言规范)相容性,对于相容于公共语言规范的类型,其他语言将提供类似的基元类型.

    关于开发的时候是使用基元类型还是FCL类型,这是个仁者见仁,智者见智的问题。C#语言规范建议我们使用基元类型,但是使用基元类型的坑还是很多的,下面来列举几个:

    (1)、很多人会困惑使用string还是String,其实是一样的,如果使用string初始化一个字符串,编译器会把string映射到String上.

    (2)、int基元类型始终映射到Int32上,long映射到Int64,不存在在32位系统上int代表Int32,在64位系统上变Int64的说话.

    (3)、注意float基元类型代表的是Single类,这是个坑。如:有new BinaryReader().ReadSingle()这个方法,没有new BinaryReader().ReadFloat()这个方法

  • 相关阅读:
    BNU 51002 BQG's Complexity Analysis
    BNU OJ 51003 BQG's Confusing Sequence
    BNU OJ 51000 BQG's Random String
    BNU OJ 50999 BQG's Approaching Deadline
    BNU OJ 50998 BQG's Messy Code
    BNU OJ 50997 BQG's Programming Contest
    CodeForces 609D Gadgets for dollars and pounds
    CodeForces 609C Load Balancing
    CodeForces 609B The Best Gift
    CodeForces 609A USB Flash Drives
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/7501579.html
Copyright © 2011-2022 走看看