: public static void Main() 18: { 19: Console.WriteLine("Demo application"); 20: } 21: }
在这个例子中,当你生成一个不是DEBUG版本的DEMO版本时,就发出了一个编译警告(第5行~第7行)。当你企图生成 一个DEBUG DEMO版本时,就引起了一个错误,它阻止了可执行文件的生成。对比起前面只是取消定义令人讨厌的符号的例 子,这些代码告诉你,“警告 标志错误 标志”企图要做的工作被认为是错误的。这肯定是更好的处理办法。 9.1.1.4 条件属性 C++的预处理也许最经常被用来定义宏,宏可以解决一种程序生成时的函数调用,而却不能解决另一种程序生成时的任 何问题。这些例子包括 ASSERT和TRACE 宏,当定义了DEBUG符号时,它们对函数调用求值,当生成一个RELEASE版本时,求 值没有任何结果。
当了解到宏不被支持时,你也许会猜测,条件功能已经消亡了。幸亏我可以报道,不存在这种情况。你可以利用条件 属性,依据某些已定义符号来包括方法。:
[conditional("DEBUG")] public void SomeMethod() { }
仅当符号DEBUG被定义时,这个方法被加到可执行文件。并且调用它,就象 SomeMethod();
当该方法不被包括时,它也被编译器声明。功能基本上和使用C++条件宏相同。 在例子开始之前,我想指出,条件方法必须具有void的返回类型,不允许其它返回类型。然而,你可以传递你想使用 的任何参数。 在清单9.4 中的例子演示了如何使用条件属性重新生成具有C++的TRACE宏一样的功能。为简单起见,结果直接输出到 屏幕。你也可以根据需要把它定向到任何地方,包括一个文件。
清单 9.4 使用条件属性实现方法
1: #define DEBUG 2: 3: using System; 4: 5: class Info 6: { 7: [conditional("DEBUG")] 8: public static void Trace(string strMessage) 9: {
|