編譯器直接支持的數據類型稱爲基元類型。基元類型直接映射到Framework類庫(FCL)中存在的類型,好比:int直接映射到System.Int32類型。再好比許多開發人員都困惑到底應該使用string仍是String,其實做爲基元類型的string也是映射到System.String的,因此二者是沒有區別,均可以使用。 編程
C#語言規範稱:從風格上最好使用關鍵字,而不是完整的系統名稱。可是許多大牛卻更願意使用FCL類型名稱,並避免使用基元類型名稱,這樣能夠避免映射的這個過程。安全
C#在作類型轉化的時候,若是在安全的狀況下,自行作隱式轉型,在不安全的狀況下,須要顯示轉化。所謂安全,是指不會發生數據丟失的狀況,如:int32轉int64.不安全意味着轉換以後,有可能失去精度或數量級,如int32轉int64.編程語言
CLR支持兩種類型:引用類型和值類型。工具
值類型的裝箱和拆箱。值類型是比引用類型更「輕型」的一種類型,由於他們不做爲對象在託管中分配,也不會被垃圾回收,也不經過指針來引用。將值類型轉換成引用類型須要裝箱(boxing)。裝箱會形成在託管堆上的內存分配,這會形成更頻繁的垃圾回收,從而損害應用程序的性能。拆箱的代價比裝箱低得多,其實就是獲取一個指針的過程,該指針包含在一個對象中的原始值類型。性能
可使用ILDasm.exe這樣的一個工具來查看方法的IL代碼,觀察box這個IL指令會在哪裏出現。指針
FCL心在包含一組新的泛型集合類,它們使非泛型的集合類稱爲「昨日黃花」,例如,應該使用System.Collections.Generic.List<T>類,而不要使用System.Collections.ArrayList類,這裏泛型集合類的最大一個加強就是泛型集合類容許開發人員在操做值類型的集合時不須要對集合中的項進行裝箱/拆箱處理。對象
C#是一種類型安全的編程語言。主要講一下dynamic基元類型,基元類型object和dynamic都映射到FCL中的System.Object。任何表達式都能隱式轉型爲dynamic,由於全部表達式最終都會生成一個從Object派生的類型。編譯器不容許將表達式從Object隱式轉型爲其餘類型,必須使用顯示轉型。然而編譯器卻容許使用隱式轉型語法將一個表達式從dynamic轉型爲其餘類型。如:Objcet o=123;Int32 n1=o;就是錯誤的,必須Int32 n1=(Int32)o;顯示轉化才ok。而dynamic d1=123;Int32 n3=d1;就能夠這樣隱式轉化。內存