程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則2:為你的常量選擇readonly而不是const(3)

Effective C#原則2:為你的常量選擇readonly而不是const(3)

編輯:關於C語言

從MSIL 命令清單的最上面一行你可以看到,StartValue(的值)是動態載入的。

但是,在MSIL命令的最後,結束條件是把值10當成硬代碼(hard-coded)使用的。

另一方面,有些時候你也須要為某些值使用編譯時常量。例如:考慮一 個須要識別不同版本的續列化情形。用來標識一個特殊版本號的常量應該是一個 編譯時常量,它們決不會發生改變。而當前版本號則應該是一個運行時常量,在 不同的版本發布後會有所改變。

private const int VERSION_1_0 = 0x0100;
private const int VERSION_1_1 = 0x0101;
private const int VERSION_1_2 = 0x0102;
//major release;
private const int VERSION_2_0 = 0x0200;
//Chech for the current version:
private static readonly int CURRENT_VERSION = VERSION_2_0;

在每次存盤時,你用運行常量來保存當前版本號。

//Read fom persistent storage, check stored version against complIE-time constant:
protected MyType(SerializationInfo info, StreamingContext cntxt){
int storedVersion = info.GetInt32 ("VERSION");
switch(storedVersion){
case VERSION_2_0:
readVersion2(info,cntxt);
break;
case VERSION_1_1:
readVersion1(info,cntxt);
break;
//etc.
}
}
  
//Write the current version:
[SecurityPermissionAttribute (SecurityAction.Demand,SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo inf,StreamingContext cxt){
//use runtime constant for currnet version
inf.AddValue("VERSION",CURRENT_VERSION);
//
//write remaining delements...
}

最後一個有利的原 因而使我們要使用編譯時常量,就是它的性能。比起運行時常量,已知的編譯時 常量可以更直接有效的被訪問。然而,性能上的功效是甚微的,並且應該與可伸 縮性的降低進行一個權衡。Be sure to profile perforMace differences before giveing up the flexibility.

const的值必須在編譯時被確定, (它們可以是):屬性參數,枚舉定義,以及一小部份你認為應該定義一個值且該 值不能在不同的版本發布時發生改變的常量。

無論如何,寧願選擇伸縮 性更強的運行時常量。

============================

小結:第 一次翻譯。昨天花了半天時間,今天又花了幾個小時。終於完成了Item2的翻譯 。感覺很吃力。或者我的翻譯很糟糕,或者已經有更好的翻譯了,但不管怎樣, 這也算是我自己辛苦勞動的結果。希望對讀者有所幫助。本想在翻譯中添加一我 自己的看法,那樣的話對原文的改動可能比較大,所以沒做太多注解。我會繼續 努力翻譯完後面的Items,不管翻譯的怎樣,也不管是不是有其它的翻譯已經完 成了。這對自己也是一個學習過程。我會在後面的翻譯中一些我自己的看法,當 然盡可能的保留原文的樣子,實在不好辦的,我就會以讀書筆記的形式另外寫文 章。

另外,我也不知道這樣的文章能不能發在首頁,如果不行,以後的 就都發到其它區吧。

返回教程目錄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved