码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-01 17:00:51      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:编译   目录   修改   some   pes   enum   文章   eth   why   

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

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

 

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

标签:编译   目录   修改   some   pes   enum   文章   eth   why   

原文地址:https://www.cnblogs.com/wangdy/p/8166947.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!