// Assembly A
public class Consts { public static readonly int A = 2; public const int B = 3; }
// Assembly B (參考 A)
public class Consumer { public static int C = Consts.A + Consts.B; } // 編譯時 C = 2 + 3 = 5
若修改 Assembly A:A=4, B=5,不重新編譯 B 直接部署新 A.dll:
readonly A:B 讀取執行時值 → C = 4 + 3 = 7(const B 已內嵌為 3)。C = 4 + 5 = 9。結論:const 為編譯期常數,值內嵌於呼叫端 IL;跨組件修改需同步重編譯。readonly 為執行期常數,透過欄位存取,自動取得最新值。
const 直接內嵌常數值,略快於 readonly 的欄位存取,但差異極微(納秒級),一般應用可忽略。
| 情境 | 建議 |
|---|---|
| 真正不變的常數(π、一天小時數、光速) | const |
| 極度效能敏感的熱路徑 | const(微優化) |
| 其他所有情況(設定值、版本號、資源路徑等) | readonly |