| 特性 | const | readonly |
|---|---|---|
| 初始化時機 | 聲明時必須初始化 | 聲明時或構造函數中 |
| 靜態性 | 隱含 static,不可寫 static const | 默認實例級,可寫 static readonly |
| 解析時期 | 編譯期靜態解析(常量折疊) | 運行期動態解析 |
| 適用範圍 | 類成員、局部變量 | 僅類成員 |
| 類型限制 | 僅內建類型(string 除外) | 任意類型(含引用類型) |
考慮以下場景:
// Consts.cs
public class Consts
{
public const string Const = "const";
public static readonly string Readonly = "readonly";
}
編譯:csc /t:library Consts.cs → 生成 Consts.dll
// Quiz.cs
public class Quiz
{
public static void Main()
{
Console.WriteLine(Consts.Const); // 輸出: const
Console.WriteLine(Consts.Readonly); // 輸出: readonly
}
}
編譯:csc /r:Consts.dll Quiz.cs → 生成 Quiz.exe
// 修改 Consts.cs
public const string Const = "CONST";
public static readonly string Readonly = "READONLY";
重新編譯 Consts.dll,直接運行 Quiz.exe,輸出將是:
CONST
READONLY
Math.PI、配置常數)用 conststatic readonlyreadonly