定義常量符號時,它的值必須能在編譯時確定。確定之後,編譯器將常量的值儲存到程式集的元資料中。這意味著只能為編譯器認定的基元型別定義常量。在c#中,以下型別都是基元型別,可以定義常量:boolean、char、byte、sbyte、int16、uint16、int32、uint32、int64、uint64、single、double、decimal、string。
由於常量的值從不變化,所以常量總被視為型別定義的一部分。換言之,常量總被視為靜態成員。
**引用乙個常量符號時,編譯器會在定義常量的程式集的元資料中查詢該符號,提取常量的值,並將值嵌入生成的il**中。由於常量的值直接嵌入**,所以在執行時不需要為常量分配任何記憶體。
將一下**編譯成乙個dll程式集
public sealed class somelibrarytype
編譯器在生成應用程式**時,會載入dll程式集,然後從分配給它的動態記憶體中提取maxentriesinlist欄位的值,而這時將不用重新編譯應用程式程式集。
當某個readonly欄位是引用型別時,那麼不可以改變的是引用,而非欄位引用的物件。
十八 常量和字段
常量就是定義完以後就永遠不會再改變的符號,它的值是在編譯時必須確定的,編譯通過後,編譯器將常量的值儲存在程式集的元資料中,定義常量將導致元資料的產生,常量只能是基元型別。因為常量的值不會被改變,所以可以說常量是型別的一部分,而不是例項成員的,是靜態的。當 引用乙個常量符號時,編譯器將在定義常量的程式...
CLR via C 常量,欄位和方法
常量 具有以下特性 1.c 允許定義基元型別常量,也允許定義非基元型別常量 值必須為null 2.常量被視為靜態成員 不能用static修飾 而不是例項成員。3.常量的指向和值都不允許被修改。字段 具有以下特性 1.c 允許定義任何資料型別的字段。常用的字段修飾符如下表所示 clr術語 c 術語 說...
常量字段定義
隱含為static 必須在宣告時初始化 必須被初始化為編譯時常量值 只有簡單型別,列舉,字串才可以是常量 常量字段 class pair private const int x 0,y 0 解析 在c 中,常量字段隱含為static,但你不能顯式宣告乙個常量欄位是static static cons...