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

代碼中爲了調用和管理方便,會把大量的類型定義爲枚舉值,如:spa

//定義
public
enum SomeTypes{ Type_1, Type_2, Type_n }

//調用
if(SomeTypes.Type_1==otherObj.SomeType){
  // do something
}

 以上代碼,簡單又熟悉,但其中隱藏一個隱患,以下:code

若是定義和調用在同一個項目(dll)中,沒問題;blog

若是定義和調用再也不同一個項目中,有問題;編譯器

操做過程:編譯

1. 在a.dll中定義SomeTypes枚舉,生成a.dll;class

2. 在b.dll中引用a.dll,並調用SomeTypes枚舉;引用

3. 修改a.dll中定義的SomeTypes枚舉值,並再次生成a.dll;bug

經過以上步驟,即便把a.dll替換到b.dll所在目錄中,也一樣會產生bug.項目

why?di

在第2步驟生成b.dll的時候,編譯器會把調用SomeTypes的代碼替換成枚舉的值,如文章開始的例子,編譯後的b.dll中代碼以下:

if( 0 ==otherObj.SomeType){
  // do something
}

因此你新修改的枚舉值並不會體如今調用的dll中。

相關文章
相關標籤/搜索