[From 7.1~7.2] 常量和欄位
阿新 • • 發佈:2018-12-28
/----------------------------7.1常量------------------------------------------/
常量是值從不變化的符號。定義常量符號時,它的值必須能在
編譯時確定。確定後,
編譯器將常量值儲存到程式元資料中。這意味著
只能定義編譯器識別的基元型別的常量。在C#中,以下基元型別,可用於定義常量:
Boolean,Char,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Single,Double,Decimal和String。然而,
C#也允許非基元型別的常量變數,前提是把值設為null。
常量總是被是為靜態成員(C#不允許常量指定static關鍵字,因為常量總是隱式為static)
注:若要改變常量程式集則必須重新編譯。
/----------------------------7.2 欄位-----------------------------------------/
型別欄位(靜態欄位)和例項欄位(非靜態欄位)的記憶體分配時機
型別欄位(靜態欄位):如果是型別欄位,容納欄位資料所需的
動態記憶體是型別物件中分配 的,而
型別物件是再型別載入到一個AppDomain時建立的。那麼,
什麼時候將型別載入到一個AppDomain中呢?這通常時再引用了
該型別的任何方法首次進行JIT編譯的時候。
例項欄位(非靜態欄位):容納欄位資料所需的動態記憶體是在
構建型別的例項時分配的。
readonly:這種欄位只能由一個構造器方法中的程式碼寫入。不會被構造器以外的任何方法寫入。
注意,可利用反射來修改readonly欄位。
C#允許使用內聯初始化語法來初始化類的欄位。但是
C#實際是在構造器中對欄位進行初始化的,欄位的內聯初始化只是一種語法上的簡化。
例:
Class A
{
public int value = 5;
}