C#之基元类型,为啥String a="123" 和string a="123"一样可以正常工作?

编译器直接支持的数据类型称为基元类型(primitive type)。由于某些数据类型如此常用,许多编辑器允许代码以简化语法来操纵它们。

最开始编程的时候特别疑惑,Int32 a=new Int32();可以用于定义一个32位整型变量。使用int b=0;也可以定义一个整型变量。咋有的书上用Int32,有的书上用int呢,我该用哪种?他们有啥区别和关系么?

实际上这是编辑器为了让开发人员使用这些常用数据类型时更加方便而内置的一套数据类型。可以认为C#编辑器自动假定所有源代码文件都添加如下的using指令 using int=System.Int32;

从一开始就使用基元类型,而不知道对应的映射的FCL(Framework类库)的数据类型,工作中会有一些困扰。例如:

  • int类型变量代表的位数时多少,有人可能认为跟操作系统位数有关,但是实际上无论在32位还是64位操作系统上运行都代表32位整数,如果你清楚int对应FCL中的Syste.Int32 是不是就不那么容易混淆了。
  • 还有FCL中的许多方法都将类型名作为方法名的一部分。如,System.Convert类型的方法包括ToBoolean,ToInt32,ToSingle等,float val = Convert.ToSingle("13.4");这样的写法看着就有些奇怪,如果携程 SIngle val=Convert.ToSingle("13.4");就更自然了。

这里列举出C#基元类型与对应的FCL类型

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.Int62 有符号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 所有类型的基类型

 

posted @ 2022-02-21 16:00  业荒于嬉  阅读(123)  评论(0编辑  收藏  举报