文章出處

常量

常量是一種特殊的符號,它有一個從不變化的值。在定義時,它的值必須在編譯時確定,并保存到程序集的元數據中。所以只有基元類型才能定義為常量。但是C#允許定義一個非基元類型的常量,但值必須是null。

由于常量的值從不變化,所以被視為類型的一部分(靜態成員)。代碼在引用常量符號時,編譯器會在元數據中查找并提取常量值,然后嵌入到IL代碼中,所以在運行時不需要為常量分配任何內存。除此之外,我們也無法獲取常量的地址,也無法以引用的方式傳遞常量。

字段

字段是一種數據成員,即可容納值類型的實例也可以是類型的引用。字段修飾符

C#術語 說明
static 這種字段是類型的一部分
(默認,不加修飾符) 這種字段與類型的一個實例關聯
readonly 這種字段只能由一個構造器方法中的代碼寫入
volatile 看到訪問這種字段的代碼,編譯器、CLR或硬件不會執行一些“線程不安全”的優化措施

對于靜態字段,內存是在類型對象中分配的,而類型對象是在類型加載到一個AppDomain時創建的(通常是在引用了該類型的任何方法首次進行JIT編譯的時候)。
對于實例字段,內存則是在構造類型的一個實例時分配。

readonly

readonly字段只能在構造器方法中寫入,也可以通過反射的方式修改readonly的值。
對于標記為readonly的引用字段,引用是不可改變的,而非字段引用的對象

參考《C# Via CLR》


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()