【必須知道】枚舉類型和缺省參數
阿新 • • 發佈:2018-01-01
style 代碼 clas enum public some 文章 現在 修改
代碼中為了調用和管理方便,會把大量的類型定義為枚舉值,如:
//定義
public enum SomeTypes{ Type_1, Type_2, Type_n }
//調用
if(SomeTypes.Type_1==otherObj.SomeType){
// do something
}
以上代碼,簡單又熟悉,但其中隱藏一個隱患,如下:
如果定義和調用在同一個項目(dll)中,沒問題;
如果定義和調用不再同一個項目中,有問題;
操作過程:
1. 在a.dll中定義SomeTypes枚舉,生成a.dll;
2. 在b.dll中引用a.dll,並調用SomeTypes枚舉;
3. 修改a.dll中定義的SomeTypes枚舉值,並再次生成a.dll;
通過以上步驟,即使把a.dll替換到b.dll所在目錄中,也同樣會產生bug.
why?
在第2步驟生成b.dll的時候,編譯器會把調用SomeTypes的代碼替換成枚舉的值,如文章開始的例子,編譯後的b.dll中代碼如下:
if( 0 ==otherObj.SomeType){ // do something }
所以你新修改的枚舉值並不會體現在調用的dll中。
【必須知道】枚舉類型和缺省參數