【发布时间】:2015-10-07 14:04:04
【问题描述】:
我有使用这种方法的 C++ 代码:
#if defined(CONSTANT)
..
// Some code
#else
// Some other code
有人告诉我,我可以在 C# 中使用类似的方法——因为我需要将此 C++ 项目重写为 C#。 但是有一个问题。从我在 C# 中看到的文档中,如果我使用
#define CONSTANT
这仅在声明它的文件中可见。
但我不想要这个。我希望这个CONSTANT 在所有课程中都可见吗?
我认为一个解决方案是在项目设置等中声明此类常量 - 但这是我的第一个问题:在这种情况下,我是否需要使用我的 DLL 发送一些额外的文件?或者这些常量会被嵌入到 DLL 中?
最后,为了避免上述问题,我正在考虑在 C# 中仅使用公共 const 值的方法。喜欢
if(Globals.SomeConstant == SOMEVALUE)
// Do this
else
// Do smth else
然后根据配置,我将在Globals.SomeConstant 声明期间将默认值设置为我需要的值,编译 DLL 并发送它。这听起来不错,它会像这样工作吗?是否会在 DLL 方法中正确分配和读取默认值? (他们会像 #ifdefs 那样工作吗?)
我知道我需要重新编译才能更改代码,但这没关系。
【问题讨论】:
-
您可以在该项目的项目属性中定义全局定义。 Properties>Build>Conditional Compilation Symbols 那里定义的符号不会被嵌入,编译后的代码将在编译器中遵循不同的路径,编译符号是“编译时”的东西,而不是运行时。您发布的第二种方法不等同于
#ifdef,我会避免这种方法。 -
它们只是编译时常量,不会嵌入到您的 DLL 中。
-
@RonBeyer:我的意思是,如果我在项目属性中定义了你提到的那些常量,我是否需要在我的 DLL 中附加任何东西?或者只是我的 DLL 就可以了?并且根据我在属性中定义的符号,我可以适当地使用#ifdefs 吗?
-
DLL 将是您需要发送的所有内容,代码将根据符号是否定义而不同地编译。这是对符号的适当使用,用于定义仅在定义该符号时才编译的代码。
-
@RonBeyer:好的,所以我应该检查属性->构建等?公共常量方法有什么问题