含义
指示编译器如何处理源代码。
例如:有时候我们想让编译器忽略一部分代码,而其他情况下,我们可能希望代码被编译。
也叫宏
基本使用方法
- 预处理指令必须和C#代码在不同的行。
- 与c#语句不同,预处理指令不需要以分号结尾。
- 包含预处理指令的每一行必须以#字符开始
- 在#前可以有空格
- 在#字符和指令之间可以有空行
- 允许行尾注释
- 在预处理指令所在的行不允许分隔符注释
C# 预处理器指令
#if | #warning |
---|---|
#else | #error |
#endif | #line |
#endif | #region |
#define | #endregion |
#undef | #pragma |
#pragma warning | #pragma checksum |
接下来
讲一下#define:
定义编译符
它是除了true和false以外的任何标识符,包括C#关键字。
它没有值。与c c++不同,它不表示字符串
#undef指令取消定义
配合#if #else 来使用
还可以配合Conditional 有条件属性来使用
#error&#waring
#error在#if结构中,只有符合#if指令的条件时才会生成消息
#waring指令用于提醒程序员回头来修改这段代码
#line
改变由编译器警告和错误消息报告出现的行数
改变被编译源文件的文件名
对交互式调试器隐藏一些行
#line integer 设置下一行值为整数的行的行号
#line “fileName” 设置文件名
#line default 重新保存实际的行号和文件名
#line hidden 在断点调试器中隐藏代码
#line 停止在调试器中隐藏代码
Conditional 属性
条件方法必须是类声明或结构声明中的方法。如果在接口声明中的方法上指定 Conditional 属性,将出现编译时错误。
条件方法必须具有 void 返回类型。
不能用 override 修饰符标记条件方法。但是,可以用 virtual 修饰符标记条件方法。此类方法的重写方法隐含为有条件的方法,而且不能用 Conditional 属性显式标记。
条件方法不能是接口方法的实现。否则将发生编译时错误。
如果条件方法用在“委托创建表达式”中,也会发生编译时错误