1. 程式人生 > >C# 基元類型

C# 基元類型

多人 sig float 說話 cal img tac com 編程

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

C# 基元類型