基元類型和FCL類型
FCL類型就是指Int32這種類型,這是CLR支持的類型。
而基元類型就是指int這種類型,這是C#編譯器支持的,實際上在編譯後,還是會被轉為Int32類型。
而且學過C的朋友肯定記得,int在32位機器和64位機器字節數可能不同,但是C#.NET裡int就是表示Int32。
因為在基元類型和FCL類型之間,有一個一一對應的映射關系。另外注意dynamic實際上對應的類型就是Object,只是說C#編譯器允許用簡單的語法讓dynamic變量參與動態調度。
表達式由字面量構成,編譯器在編譯的時候就能完成表達式求值
Boolean found=false;//生成的代碼將found設為0 Int32 x=100+20+3;//x設為123 String a="a"+"bc";//s設為“abc”
checked和unchecked基元類型操作
此指令就用來檢查溢出和不檢查溢出,而默認是unchecked,不過這個可以改。檢查溢出就報異常,不檢查溢出就回滾。
引用類型和值類型
所謂值類型的去看它們類型的定義,比如Int32和DayOfWeek都是struct和enum類型,而struct類型實際上派生自System.ValueType類型,而Enum類型派生自System.Enum類型。而Enum類型最終還是派生自System.ValueType類型。
好吧,他們倆個的差異性其實還是蠻多的,不過基本上這是最基礎的了,而且基本上是本書就講,所以反而懶得寫了。
裝箱與拆箱
裝箱就是把本來在棧中的值類型,在堆中新開辟一個內存空間,把值類型的數據復制進去,並增加引用類型都有的類型指針和同步塊索引,然後返回這個內存空間引用地址。
拆箱就是反過來,先獲取裝箱對象中各個字段的地址,再將這些字段包含的值從堆復制到棧。
由上面看出裝箱拆箱其實很影響效率,所以寫代碼的時候應該避免。
——未完待續