C#预处理器指令
C#预处理器指令一、C#预处理器指令可以用来
1、当计划发布两个版本的代码的时候。即基本版和拥有更多版本的企业版,就可以用到预处理器指令。
2、在编译基本版的时候,使用预处理指令会禁止编译器编译与额外功能相关的代码。
3、在编写提供调试信息的代码时,也可以使用预处理器指令。
二、C#常见的预处理器指令的功能
1、#define和#undef
例如
#define Debug
(1)、Debug可以看做是声明的一个变量,但此变量没有真正的值,仅存在。
(2)、#define单独用没什么意义,一般是和#if结合使用。
#undef Debug
删除 Debug 的定义
(1)、如果符号不存在,#undef 就没有任何作用。
(2)、如果符号已经存在,则#define 也不起作用。
(3)、必须把#define 和#undef 命令放在C#源文件的开头位置,在声明要编译的任何对象的代码之前。
2、#if、#elif、#else 和#endif
这些指令告诉编译器是否要编译某个代码块。
例如
//#define DebugA
#define DebugB
using System;
namespace MyApplication
{
class Program
{
static void Main(string[] args)
{
#if DebugA
Console.WriteLine("Hello DebugA");
#elif DebugB
Console.WriteLine("Hello DebugB");
#else
Console.WriteLine("Hello Debugelse");
#endif
}
}
}
运行结果
说明
(1)、#elif(=else if)和#else指令可以用在#if中,和C#中的if,else if,else含义相同。
(2)、#if和#elif支持一组逻辑运算符"!","==","!="和"||",如果符号存在,则为true。
(3)、#if DebugB && DebugA //当Debug与DebugA同时存在才会执行
3、#warning 和 #error
当编译器遇到它们时,会分别产生警告或错误。如果编译器遇到#warning 指令,会给用户显示#warning 指令后面的文本,之后编译继续进行。如果编译器遇到#error 指令,就会给用户显示后面的文本,作为一条编译错误消息,然后会立即退出编译,不会生成IL 代码。 (和编译器的警告和错误意义类似)
例如
static void Main(string[] args)
{
#warning "All Right?"
Console.WriteLine("Contine...");
#error "All Right?"
Console.WriteLine("Contine...");
}
效果图
4、#region 和#endregion
用于把一段代码标记为有给定名称的一个块, 使得代码可以更好的布局
5、#line
用于改变编译器在警告和错误信息中显示的文件名和行号信息。
如果编写代码时,在把代码发送给编译器前,要使用某些软件包改变输入的代码,就可以使用这个指令,因为这意味着编译器报告的行号或文件名与文件中的行号或编辑的文件名不匹配。
也可以使用语法#line default 把行号还原为默认的行号
例如
#line 164 "Core.cs" // We happen to know this is line 164 in the file
// Core.cs, before the intermediate
// package mangles it.
// later on
#line default // restores default line numbering
6、#pragma warning
可以启用或禁用指定的编译警告。
例如
#pragma warning disable 169 public class MyClass { int neverUsedField; } #pragma warning restore 169
上面的例子禁止“字段未使用”警告,然后在编译MyClass 类后还原该警告