我在一个模块(A)中有一个枚举定义,例如, SUCCESS = 0,INVALID_REQ = 1等。然后我有另一个dll(模块B),它有自己的一组状态枚举。一旦我们在A中添加一个新的枚举值,我们必须手动将它添加到B中,因为A在.NET中,B是C代码。除此之外,A中的枚举只是B中状态枚举的一部分(B除了A的状态外,还有其自身的内部状态)。 这似乎是这两个模块之间非常紧密的耦合。任何建议,使他们不那么耦合? Thx!在模块之间转换枚举
5
A
回答
2
为什么不编写一个简单的脚本,在构建期间基于文件生成这些枚举?如果你真的想解开它们,你需要让某人成为主人,并将其内容暴露给另一方..可能使用RCW ..
1
有趣的是在这里使用反射。编写一个小程序,通过模块A的反射读取enum,并生成一个用于c模块的.h文件。
相关问题
- 1. 在Int32和枚举之间转换
- 2. 转换枚举来枚举
- 3. 在枚举值之间切换:C++
- 4. 枚举和枚举之间的区别
- 5. 在C枚举和XML之间进行转换
- 6. 将枚举转换为枚举的MACRO
- 7. 将枚举转换为其他枚举
- 8. 不能转换UserQuery枚举枚举
- 9. 转换为枚举
- 10. 转换枚举在Python
- 11. 跨模块的Python枚举
- 12. 两个枚举之间的超载转换运算符
- 13. C#阻止枚举转换int转换
- 14. 将MemberInfo []转换为枚举
- 15. 正确转换为枚举
- 16. Jbeahve - 转换枚举参数
- 17. 转换枚举迭代器
- 18. 转换枚举内HTML
- 19. 枚举类对象转换
- 20. 将枚举转换为uint
- 21. XSL转换为枚举
- 22. 动态枚举转换器
- 23. Convert.ChangeType并转换为枚举?
- 24. 隐式转换为枚举
- 25. 在Postgres中将枚举类型整数转换为枚举
- 26. 模式翻转枚举var
- 27. 在Angular模块中导出枚举
- 28. iPhone - 块枚举
- 29. 铸造枚举之间在C#
- 30. 在类之间共享一个枚举
这里最大的问题不在于保持两者同步(尽管这是一个问题),而是事实上,B中的枚举意味着与A中的枚举不同的事实。现在,您打开了想要为A添加一个新元素,但突然它与B使用的内部值冲突。如果您为了互操作性的目的需要复制值,请使用_only_来实现互操作性并单独管理内部状态。 – 2011-01-18 22:40:54
这里有一个*隐式合约*。想象一下HTTP2会添加一个新的动词,如[JABBERWOCKY](http://www.jabberwocky.com/carroll/jabber/jabberwocky.html)。所有的HTTP2客户端/服务器需要在知道这个合同的情况下进行编码。使用明确的[协议]版本,或许带有警卫和[向下兼容性](http://en.wikipedia.org/wiki/Backward_compatibility),可以有效捕捉和/或减轻不匹配。有工具可以帮助分享合同信息 - 想象[COM IDL](http://en.wikipedia.org/wiki/Component_Object_Model)或其他脚手架发电机。 – 2011-01-19 00:08:01