C#预处理指令从来不会转化为可执行代码中的令令,但会影响编译过程的各个方面。例如,使用预处理器指令可以禁止编译器编译代码的某一部分。如果计划发布两个版本的代码,即基本版本有更多功能的企业版本,就可以使用这些预处理器指令。在编译软件的基本版本时,使用预处理器指令还可以禁止编译器编译与额外功能相关的代码。另外,在编写提供调试信息的代码时,也可以使用预处理指令。实际上,在销售软件时,一般不希望编译这部分代码。预处理器指令的开头都有符号#。
1.#define 和 #undef
#define DEBUG它告诉编译器存在给定的符号,在本例中是DEBUG。
#undef正好相反……删除符号的定义。
必须把#define和#undef命令放在C#源代码的开头,在声明要编译的任何对象遥代码之前。#define本身并没有什么用,但当与其他预处理器指令(特别是#if)结合使用时,它的功能就非常强大了。
2.#if,#elif,#else和#endif
满足某些条件,预编译相应分支的代码,类似于选择结构。
3.#warning和error
当编译器遇到它们时,会分别产生一个警告或错误。如果编译器遇到#warning指令,会给用户显示#warning指令后面的文本,之后编译继续进行。如果编译器遇到#error指令,就会给用户显示后面的文本,作为一个编译错误信息,然后会立即退出编译,不会生成IL代码。
使用这两个指令可以检查#define语句是不是做错了什么事,使用#warning语句可以让自己想起做过什么事:
#if DEBUG&&RELEASE
#error "You've defined DEBUG and RELEASE simultaneously!"
#endif
#warning "Don't forget to remove this line before the boss tests the code!"
Console.WriteLine("I hate this job");
4.#region和#endregion
标记代码段,使每个块具有一个逻辑名字,在VS中可以合上打开,便于代码管理。
5.#line
6#pragma