必须知道枚举类型和缺省参数

Posted wangdy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了必须知道枚举类型和缺省参数相关的知识,希望对你有一定的参考价值。

代码中为了调用和管理方便,会把大量的类型定义为枚举值,如:

//定义
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中。

 

以上是关于必须知道枚举类型和缺省参数的主要内容,如果未能解决你的问题,请参考以下文章

Python函数:函数的定义语法调用参数类型(必选参数缺省参数可选参数关键字可选参数)return返回值函数嵌套

006.值类型引用类型枚举类型字符串冒泡排序

C++缺省参数 + 函数重载

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]

在代码片段中包含类型转换

枚举类型