• 基元类型


    什么是基元类型?
    编译器直接支持的数据类型成为基元类型(Primitive type)。基元类型直接映射到Framework类库(FCL)里面中存在的类型。例如:C#中的int 直接映射到System.Int32类型。因此以下四行代码生成相同的IL:
    int a=0;
    System.Int32 a=0;
    int a=new int();
    System.Int32 a=new System.Int32();
    下图展示了FCL类型在C#中对应的基本类型:
    C#基元类型 FCL类型 说明
    sbyte System.Sbyte 有符号8位值
    byte System.Byte 无符号8位值
    short System.Int16 有符号16位值
    ushort System.UInt16 无符号16位值
    int System.Int32 有符号32位值
    uint System.UInt32 无符号32位值
    long System.Int64 有符号64位值
    ulong System.UInt64 无符号64位值
    char System.Char 16位的Unicode字符
    float System.Single 32位浮点数
    double System.Double 64位浮点数
    bool System.Boolean true/false
    decimal System.Decimal 128位高精度浮点值
    string System.String 字符数组
    object System.Object 所有类型基类型
    dynamic System.Object 对于CLR,和object完全一致,C#允许使用简单语法让dynamic参与动态调度
    在开发程序中应该使用基元类型还是FCL类型?
    C语言规范称:
      从风格上说,最好使用关键字,而不是使用完整的系统类型名称。
    CLR via C#上说:使用FCL类型名称,完全不要使用基元类型,理由如下:
      1.C#的string(关键字)映射到System.String(一个FCL类型),所以两者没有区别。类似的,一些开发人员说如果在32位机器上运行int代表32位整数,在64位机器上跑代表64位整数,这个说法不正确,int是映射到System.Int32的,永远是32位整数,如果使用FCL类型,就不会有这样的误解了。
      2.C#的long映射到Sytem.Int64,但是C++/CLI的long是System.Int32。习惯一种语言的人看另外一种语言时候容易误解代码意图。而且很多语言甚至不把long当成关键字。
      3.FCL都将类型名称作为方法名的一部分。例如:BinaryReader类型包含ReadBoolean,ReadInt32,ReadSingle等,Convert类型包含ToBoolean,ToInt32,ToSingle,如以下float那一行代码很不容易理解。
    BinaReader br=new BinaryReader();
    float val=br.ReadSingle();
    Single val=br.ReadSingle();
      4.平时只用C#的程序员经常忘记还可以使用其他语言写面向CLR的代码。比如FCL团队向库里引入了像Array的GetLongLength的方法,该方法返回Int64值,在C#中是long,但在其他语言中不是,再比如:System.Linq.Enumerable的LongCount方法。
     
    个人觉得,如果了解了背后的原理,其实使用哪种方式都可以。
  • 相关阅读:
    HTTP协议简介
    HTTP缓存带来的“bug”--HTTP 协议 Cache-Control
    PHP7变量的内部实现(一)
    PHP 简单的加密解密方法
    php 制作圆形图片
    python解决图的最短路径问题
    PHP中文关键词匹配
    D25
    D24
    D23
  • 原文地址:https://www.cnblogs.com/zhangqi0924/p/6109548.html
Copyright © 2020-2023  润新知