gpt4 book ai didi

c# - 在 C# 中使用#ifdefs 的问题

转载 作者:行者123 更新时间:2023-11-30 02:36:16 25 4
gpt4 key购买 nike

我有使用这种方法的 C++ 代码:

#if defined(CONSTANT)
..
// Some code
#else
// Some other code

有人告诉我可以在 C# 中使用类似的方法,因为我需要将此 C++ 项目重写为 C#。但是有一个问题。从文档中我已经看到在 C# 中如果我使用

#define CONSTANT

这仅在声明它的文件中可见

但我不想要这个。我希望这个 CONSTANT 在所有类中都可见吗?我认为一个解决方案是在项目设置等中声明此类常量 - 但这是我的第一个问题:在那种情况下,我需要用我的 DLL 发送一些额外的文件吗?或者这些常量会被嵌入到 DLL 中?

最后,为了避免上述问题,我正在考虑在 C# 中仅使用公共(public)常量值的方法。喜欢

if(Globals.SomeConstant == SOMEVALUE)
// Do this
else
// Do smth else

然后根据配置,我将在声明 Globals.SomeConstant 期间将默认值设置为我需要的值,编译 DLL 并将其发布。这听起来不错吗?它会像这样工作吗?是否会在 DLL 方法中正确分配和读取默认值? (它们会像#ifdefs 一样工作吗?)

我知道我需要重新编译才能更改代码,但没关系。

最佳答案

C# 没有像 C/C++ 那样的“预处理器”。这些 #define 也不是“常量”——它们只是“符号”,您只能查询它们是否存在。它们不会在编译的程序集中留下任何痕迹。

现在,当您使用(或不使用)#defined 符号编译程序集时,结果很可能会有所不同:

public const int I =
#if FOO_BAR
42
#else
43
#endif
;

#define 方面,C/C++ 和 C# 在概念上的区别是 C/C++ 中的库通常以源代码形式分发,当与您自己的代码一起编译时,遵循全局 #define。另一方面,在 C# 中,第三方代码通常作为编译后的程序集分发。因此,如果您想更改此第三方程序集中代码的工作方式,则必须在运行时执行此操作。

关于c# - 在 C# 中使用#ifdefs 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994387/

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