C#预处理指令
预处理指令的开头都有”#”号.使用预处理指令可以禁止编译器编译代码的某一部分.如果计划发布两个版本的代码,就可以使用预处理指令.
#define 和 #undef
#define DEBUG 它告诉编译器存在给定名称的符号. DEBUG有些类似于声明一个变量,但它并没有真正的值,只是存在而已.
#undef DEBUG 正好相反,它删除符号的定义.
必须将#define和#undef放在C#源代码的开头,在声明要编译的任何对象的代码之前. #define本身并没什么用,但当它与其它预处理指令(特别是#if)结合使用时,它的功能就非常强大了.
#if,#elif,#else和#endif
这些指令告诉编译器是否要编译某个代码块.下面的例子说明了,只有前面的#define定义了DEBUG后才能执行里面的内容.否则,编译器忽略里面的所有内容,直(忽略)到见到#endif为止.
一般调试时可以使用这招(C++很普遍),完成调试后,就将#define注释掉就OK.
public void Show()
{
#if DEBUG
Console.WriteLine("DEBUG have defined...");
#endif
}
#if 和 #endif 还支持逻辑运算符.如果存在(被#define了),就认为是true,否则是false.
#if (DEBUG==false)
#warning 和 #error
编译器遇到#warning时,会给用户显示#warning后面的文本,之后继续编译;
编译器遇到#error时,会给用户显示#error后面的文本,之后立即退出编译.
#if DEBUG
#error "You have defined DEBUG";
#endif
#if DEBUG
#warning "You have defined DEBUG";
#endif
#region 和 #endregion
不做过多解释了.
#line
用于改变编译器在警告我错误信息中的文件名和行号.如果编译前你导入了某些软件包,当编译出错后,出错代码的行号就和实际中不符.使用#line即可解决此问题.
#pragma
用于抑制或恢复指定的编译警告.下例中,#pragma…disable到#pragma…restore之间的部分禁止字段使用警告.
#pragma warning disable 169
public class MyClass
{
int num;
}
#pragma warning restore 169