C# readonly 欄位在 IL 標記 initonly。CLR 僅允許在建構函數中修改,但不嚴格執行(文檔要求語言編譯器強制)。
const 編譯為 literal 欄位,編譯期即為常數值。IL 禁止對 literal 欄位 stsfld(寫入),違反會拋 MissingFieldException。
const int k = 3;
const int j = k - 1; // 2
const int i = j + 4; // 6
IL 中三者皆為 literal,Main 僅 ldc.i4.3 直接使用 k 值,其他常量編譯期已內聯。