省略代码:条件属性和预处理指令之间的任何区别?

mar*_*man 0 c# debugging compiler-directives c-preprocessor

我想知道它们之间有什么区别

#define MYSYMBOL

#if MYSYMBOL
public void foo () {

    // ...
}
#endif
Run Code Online (Sandbox Code Playgroud)

#define MYSYMBOL

[Conditional("MYSYMBOL")]
public void foo () {

    // ...
}
Run Code Online (Sandbox Code Playgroud)

也许这是显而易见的,但如果有人能给我一个正确方向的提示,我会很感激:)

Nic*_*ler 5

它们是不同的.

使用#if完全删除所附的代码,因此调用该方法的任何代码都将无法编译,因为该方法已消失.您也可以通过这种方式包装任意数量的代码,而不仅仅是一个完整的方法.

使用[Conditional]意味着该方法不会在运行时调用,但对它的调用仍将编译(但不会在IL代码中发出调用).而且,这样一来,该方法必须返回void,并没有任何outref参数.