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()這個方法