基元类型

什么是基元类型?
编译器直接支持的数据类型成为基元类型(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类型说明
sbyteSystem.Sbyte有符号8位值
byteSystem.Byte无符号8位值
shortSystem.Int16有符号16位值
ushortSystem.UInt16无符号16位值
intSystem.Int32有符号32位值
uintSystem.UInt32无符号32位值
longSystem.Int64有符号64位值
ulongSystem.UInt64无符号64位值
charSystem.Char16位的Unicode字符
floatSystem.Single32位浮点数
doubleSystem.Double64位浮点数
boolSystem.Booleantrue/false
decimalSystem.Decimal128位高精度浮点值
stringSystem.String字符数组
objectSystem.Object所有类型基类型
dynamicSystem.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方法。
 
个人觉得,如果了解了背后的原理,其实使用哪种方式都可以。

转载于:https://www.cnblogs.com/zhangqi0924/p/6109548.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值