1. 程式人生 > >【必須知道】枚舉類型和缺省參數

【必須知道】枚舉類型和缺省參數

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中。

【必須知道】枚舉類型和缺省參數