程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 【C#進階系列】05 基元類型、引用類型和值類型,

【C#進階系列】05 基元類型、引用類型和值類型,

編輯:C#入門知識

【C#進階系列】05 基元類型、引用類型和值類型,


 基元類型和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類型。

好吧,他們倆個的差異性其實還是蠻多的,不過基本上這是最基礎的了,而且基本上是本書就講,所以反而懶得寫了。

裝箱與拆箱

裝箱就是把本來在棧中的值類型,在堆中新開辟一個內存空間,把值類型的數據復制進去,並增加引用類型都有的類型指針和同步塊索引,然後返回這個內存空間引用地址。

拆箱就是反過來,先獲取裝箱對象中各個字段的地址,再將這些字段包含的值從堆復制到棧。

由上面看出裝箱拆箱其實很影響效率,所以寫代碼的時候應該避免。

——未完待續

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved