文章出處
文章列表
常量
常量是一種特殊的符號,它有一個從不變化的值。在定義時,它的值必須在編譯時確定,并保存到程序集的元數據中。所以只有基元類型才能定義為常量。但是C#允許定義一個非基元類型的常量,但值必須是null。
由于常量的值從不變化,所以被視為類型的一部分(靜態成員)。代碼在引用常量符號時,編譯器會在元數據中查找并提取常量值,然后嵌入到IL代碼中,所以在運行時不需要為常量分配任何內存。除此之外,我們也無法獲取常量的地址,也無法以引用的方式傳遞常量。
字段
字段是一種數據成員,即可容納值類型的實例也可以是類型的引用。字段修飾符
C#術語 | 說明 |
---|---|
static | 這種字段是類型的一部分 |
(默認,不加修飾符) | 這種字段與類型的一個實例關聯 |
readonly | 這種字段只能由一個構造器方法中的代碼寫入 |
volatile | 看到訪問這種字段的代碼,編譯器、CLR或硬件不會執行一些“線程不安全”的優化措施 |
對于靜態字段,內存是在類型對象中分配的,而類型對象是在類型加載到一個AppDomain
時創建的(通常是在引用了該類型的任何方法首次進行JIT編譯的時候)。
對于實例字段,內存則是在構造類型的一個實例時分配。
readonly
readonly
字段只能在構造器方法中寫入,也可以通過反射的方式修改readonly
的值。
對于標記為readonly
的引用字段,引用是不可改變的,而非字段引用的對象
參考《C# Via CLR》
文章列表
全站熱搜