Const 變數與Static readonly的不同
假日在家看書(Java語言),在使用static final變數時,可以使用針對該變數使用Switch{}陳述式,但使用C#的staitc readonly時卻無法使用,錯誤訊息為[必須為常數值const]。
為此我看了msdn作一下小研究, const與static readonly 都是唯讀變數,系統啟動時就存在,其生命週期等同Application變數。
常數const在宣告時就必須初始它的值且是固定不可變的,而static readonly則是宣告時不強制初始值,但既然已經宣告作readonly之後當然也不能再給值,所以一般若宣告static readonly時一定會給初始值,不過其初始值是可變的。
程式碼比較如下:
const int delayMonth=1;//正確
const int delayMonth=DateTime.Now.Month;//錯誤
因為DateTime.Now.是可變的 例如:本月是7 下一個月是8,常數必須是一個明確的固定值而不是隨著外在因素變動。
static readonly int delayMonth=DateTime.Now.Month;//正確 初始值是可變的
由上述的兩個特性作比較的話switch的陳述式比須針對不可變動值才能作case的動作,所以static readonly並不適用,只能使用const變數 。
參考
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.cht/dv_csref/html/79eb447c-117b-4418-933f-97c50aa472db.htm