c# 预处理器指令作用域

8

我希望使用:

#define

并且

#if

我希望能够在单元测试期间模拟可能缺失的硬件。如何使用#define语句?

也就是说,它的默认作用域是什么?我可以改变指令的作用域吗?

4个回答

14
正如Chris所说,#define的范围仅限于该文件。(值得注意的是,这与“类”不同 - 如果您有一个部分类型,则可能由两个文件组成,其中一个文件定义了符号,另一个文件没有!)
您还可以在整个项目中定义一个符号,但是这是通过项目属性编译器开关而不是在源代码中指定的。

1
注意:在VS2017中,项目范围内的符号(在“项目/属性”中设置)似乎不能与单元测试项目一起使用。非常不方便。 - Goodies
@Goodies:你所说的“不起作用”是什么意思?编译器根本不在乎它是单元测试属性还是其他属性。当然,单元测试项目看不到生产项目中定义的任何内容。 - Jon Skeet

3

来自MSDN,它的范围是文件。


1

虽然你能不能不走Mock对象的路线,比如Mock.Rhinos


1

是的,正如Chris所提到的那样,它的作用域是整个文件。您可以在文件中的任何地方使用定义的关键字。

i.e;

#define something
... some code ...

在任何方法、类体或命名空间中,您都可以像这样使用它;

#if something
  ... some conditional code ...
#else
  ... otherwise ...
#endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接