gpt4 book ai didi

c# - 可以在静态/常量成员上使用处理器 #if 吗?

转载 作者:太空狗 更新时间:2023-10-30 01:18:11 25 4
gpt4 key购买 nike

我的项目中有一个包含全局配置的类,如下所示:

public class Config {
public const bool LOGGING_ENABLED = false;
}

然后我希望能够使用该成员编写预处理器指令,如下所示:

#if LOGGING_ENABLED
[Logging]
public class MyClass: ContextBoundObject
#else
public class MyClass
#endif
{
...
}

但很明显,LOGGING_ENABLED 将成为未定义的,因为它实际上并未引用 Config.LOGGING_ENABLED。有没有办法在另一个类中引用常量成员?我不想将 #define LOGGING_ENABLED 放在每个类文件的顶部,这违背了整个目的。

最佳答案

那是不可能的。 C# 预处理器是一个 C# 构造。它的所有指令都由 C# 编译器“执行”。运行时不知道您使用了哪些 #if 指令。

为了动态更改类型的属性,您需要在 C# 编译器完成后执行程序集重写构建步骤。这有很多缺点。

寻找不同的方法。例如,将 LOGGING_ENABLED 定义为 preprocessor symbol (使用项目设置)。

也就是说,我完全反对这种方法。如果您测试的代码不是在生产环境中运行的代码,您将很难测试您的应用程序。尽可能在所有构建情况下使用相同的代码。这可能意味着您需要做出运行时决策。例如,您可能有不同的记录器并在应用程序启动时选择一个。

关于c# - 可以在静态/常量成员上使用处理器 #if 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28381633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com