本章內容
C#程序是一組類型聲明
類型是一種模板
實例化類型
數據成員和函數成員
預定義類型
用戶定義類型
棧和堆
值類型和引用類型
變量
靜態類型和dynamic關鍵字
可空類型
靜態類型和dynamic關鍵字
你可能巳經注意到了,每一個變量都包括變量類型。這樣編譯器就可以確定運行時需要的內
存總量以及哪些部分應該存在棧上,哪些部分應該存在堆上。變量的類型在編譯的時候確定并且
不能在運行時修改。這叫作靜態類型。
但是不是所有的語言都是靜態類型的,諸如IronPython和IronRuby之類的腳本語言是動態
類型的。也就是說,變量的類型直到運行時才會被解析。由于它們是·NET語言,所以C#程序需
要能夠使用這些語言編寫的程序集。問題是,程序集中的類型到運行時才會被解析,而C#又要
引用這樣的類型并且需要在編譯的時候解析類型。
針對這個問題,C#語言的設計者增加了dynamic關鍵字,代表一個特定的C#類型,它知道
如何在運行時解析自身。
在編譯時,編譯器不會對dynamic類型的變量做類型檢查。相反,它將與該變量及該變量的
操作有關的所有信息打包。在運行時,會對這些信息進行檢查,以確保它與變量所代表的實際類
型一致。否則,將在運行時拋出異常。
可空類型
在某些情況下,特別是使用數據庫的時候,你希望表示變量目前未保存有效的值對于引用
類型,這很簡單,可以把變量設置為null。但定義值類型的變量時,不管它的內容是否有有效的
意義,其內存都會進行分配。
對于這種情況,你可能會使用一個布爾指示器來和變量關聯,如果值有效,則設置為true,
否則就設置為false。
可空類型允許創建可以標記為有效或無效的值類型變量,這樣就可以在使用它之前確定值的
有效性。普通的值類型稱作非可空類型。第27章將詳細介紹可空類型,那時你己經對C#有了更
深人的理解。