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

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

Int32 a = new Int32();

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

int a=;

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

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

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

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

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

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

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

.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.maxstack
.locals init (
[] int32 num,
[] int32 num2,
[] int32 num3,
[] int32 num4)
L_0000: nop
L_0001: ldc.i4.
L_0002: stloc.
L_0003: ldc.i4.
L_0004: stloc.
L_0005: ldc.i4.
L_0006: stloc.
L_0007: ldc.i4.
L_0008: stloc.
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()这个方法

C# 基元类型的更多相关文章

  1. CLR:基元类型、引用类型和值类型

    最新更新请访问: http://denghejun.github.io   前言 今天重新看了下关于CLR基元类型的东西,觉得还是有必要将其记录下来,毕竟这是理解CLR成功 之路上的重要一步,希望你也 ...

  2. 《CLR via C#》读书笔记--基元类型、引用类型和值类型

    编程语言的基元类型 编译器直接支持的数据类型称为基元类型.基元类型直接映射到Framework类库中存在的类型.例如:C#中的int直接映射到System.Int32类型.下表给出了C#基元类型与对应 ...

  3. CLR via C#(02)-基元类型、引用类型、值类型

    http://www.cnblogs.com/qq0827/p/3281150.html 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架 ...

  4. 《CLR via C#》读书笔记(5)基元类型、引用类型和值类型

    5.1 基元类型 编译器直接支持的数据类型称为基元类型(primitive type). 以下4行到吗生成完全相同的IL int a = 0; //最方便的语法 System.Int32 b = 0; ...

  5. 【CLR Via C#】第5章 基元类型、引用类型、值类型

    第二遍看这本书,决定记录一下加深印象. 1,基元类型 什么事基元类型?基元类型是直接映射到FrameWork类库(FCL)中存在的类型,编译器直接支持的数据类型.比如int直接映射到System.In ...

  6. CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段

    编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1 ...

  7. 【C#进阶系列】05 基元类型、引用类型和值类型

     基元类型和FCL类型 FCL类型就是指Int32这种类型,这是CLR支持的类型. 而基元类型就是指int这种类型,这是C#编译器支持的,实际上在编译后,还是会被转为Int32类型. 而且学过C的朋友 ...

  8. 谈谈C#基元类型

    首先看一下.NET 中的基元类型,如下表: C# Type | .NET Framework Type -------------| ---------------------- bool | Sys ...

  9. [CLR via C#]5.4 对象哈希码和dynamic基元类型

    原文:[CLR via C#]5.4 对象哈希码和dynamic基元类型 FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处.为此,System.Object提供了虚方 ...

  10. [CLR via C#]5.1 基元类型

    原文:[CLR via C#]5.1 基元类型 某些数据类在开发中非常常用,以至于许多编译器允许代码已简化的语法来操作它们.例如可以使用以下语法来分配一个整数: System.Int32 a = ne ...

随机推荐

  1. hive 学习之异常篇

    一.刚装上hive在执行hive启动的过程中出现 [hadoop@localhost hive-0.6.0]$ hive Invalid maximum heap size: -Xmx4096m Th ...

  2. js之create()

    语法: Object.create(proto, [propertiesObject]) 返回一个新的对象的指针 proto:对象会被作为新创建的对象的原型 [propertiesObject]:对象 ...

  3. sql笔试练习

    转:http://www.360doc.com/content/16/0919/17/14804661_592046675.shtml 本文是在Cat Qi的参考原帖的基础之上经本人一题一题练习后编辑 ...

  4. nodejs中使用mongodb quickstart

    nodejs中使用mongodb quickstart node 中使用mongodb的quick start.整理的官网crud简单例子. 在百度找了几篇帖子都有问题,所以直接看官网了. 连接Mon ...

  5. "请求被中止: 未能创建 SSL/TLS 安全通道"解决办法

    1.安装证书: 手动双击证书安装,过程略 2.分配权限: 在控制台中找到安装的证书,右键选择“管理私钥”, 添加自己需要的权限,如果在测试可以直接添加Everyone 3.修改代码:public st ...

  6. VC++ 定制应用程序的外观

    一.在窗口创建之前改变窗口的大小和标题 要改变应用程序窗口的大小可以通过在PreCreatWindowl函数中修改CREATSTRUCT结构体变量成员的值 BOOL CMainFrame::PreCr ...

  7. hdu 3664 Permutation Counting(水DP)

    Permutation Counting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. 使用VSTS进行单元测试练习

    本次作业要求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没有书的同学 ...

  9. Vue2.5 Web App 项目搭建 (TypeScript版)

    参考了几位同行的Blogs和StackOverflow上的许多问答,在原来的ng1加TypeScript以及Webpack的经验基础上,搭建了该项目,核心文件如下,供需要的人参考. package.j ...

  10. vsftpd 常见问题

    一.vsftp服务能开启却连接不上的解决办法: 用虚拟机装了centos,vsftp是用centos自带的.启动vsftd服务后却一直连不上,原因是被防火墙给挡了. 查看防火墙状态:/etc/init ...