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

本文探讨了在不同项目间使用枚举类型时可能遇到的问题,特别是当定义与调用不在同一项目中时,修改枚举值可能导致的bug。文章通过实例说明了编译器如何处理枚举值,以及为何新修改的枚举值不会体现在已编译的调用项目中。

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

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

 

转载于:https://www.cnblogs.com/wangdy/p/8166947.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值