1. 程式人生 > >第七章 常量和字段

第七章 常量和字段

不能 執行 獲取 width ole string ola nbsp 因此

目錄

7.1 常量

7.2 字段

7.1 常量

常量是值從不變化的符號。定義常量符號時,它的值必須能在編譯時確定。確定後,編譯器將常量值保存到程序集元數據中。意味著只能定義編譯器可以識別的基元類型常量。然而C#也可以定義非基元類型的常量變量,前提是把值設為null。

基元類型有:Boolean,Char,Byte,SByte,Int16,Int32,Int64,UInt16,UInt32,UInt64,Single,Double,Decimal,String

由於常量值不變化,所以常量總是被視為類型定義的一部分。常量總是被視為靜態成員,而不是實例成員。定義常量將導致川創建元數據。

代碼引用常量符號時,編譯器在定義常量的程序集的元數據中查找該符號,提取常量的值,將值嵌入生成的IL代碼中。由於常量的值直接其嵌入代碼,所以在運行時不需要為常量分配任何內存。除此之外,不能獲取常量的地址,也不能以傳引用的方式傳遞常量。這些限制意味著常量不很好的支持跨程序集的版本控制。因此,只有確定一個符號的值從不發生變化才應定義常量。

7.2 字段

字段時一種數據成員,其中容納了一個值類型的實例或者對一個引用類型的引用。

CLR支持類型(靜態)字段和實例(非靜態)字段。如果是靜態字段,容納字段數據所需的動態內存是在類型對象中分配的,而類型對象是在類型加載到一個AppDomain時創建的。在引用了該類型的任何方法首次進行JIT編譯時加載AppDomain。如果是實例字段,容納字段所需的動態內存是在構造類型的實例時分配的。

CLR術語 C#術語 說明
Static static 這種字段時類型狀態的一部分,而不是對象狀態的一部分
Instance 默認 這種字段時與類型的一個實例關聯,而不是與類型本身關聯。
InitOnly
readonly 這種字段只能由一個構造器方法中的代碼寫入
Volatile volatile 編譯器,CLR和硬件不會對訪問這種字段的代碼執行”線程不安全“的優化措施,

由於字段存儲在動態內存中,所以它們的值在運行時才能獲取。

第七章 常量和字段