编程实例 C#中的预处理器指令
来源:互联网 发布:java生成二维码简单吗 编辑:程序博客网 时间:2024/05/16 13:59
C#有许多名为预处理器指令的命令。这些命令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面。例如,预处理器可禁止编译器编译代码的某一部分。如果计划发布两个版本的代码,比如基本版本和企业版本,或者针对不同的.NET Framework版本进行编码,就可以使用这些指令。在Anthem.NET的代码中我们经常可以看到这种用法。
预处理器指令的开头都有符号#。
注意:
C#中并没有一个像C++那样的独立预处理器,所谓的预处理器指令仍由编译器处理。
下面将对这些指令逐一介绍。
1. #define和#undef
#define可以定义符号。当将符号用作传递给#if指令的表达式时,此表达式的计算结果true。如
#define DEBUG
它告诉编译器存在给定名称的符号,在本例中是DEBUG。这个符号不是实际代码的一部分,只在编译代码时存在。
#undef正好相反,它删除一个符号。
必须把#define和#undef命令放在C#源码的开头,即在要编译的任何代码之前。它不像C++中那样可以定义常数值。
#define本身并无大用,它需要配合#if指令使用。
2. #if, #elif, #else和#endif
这些指令告诉编译器是否要编译某个代码块。看下面的方法:
static void PrintVersion() { #if V3 Console.WriteLine("Version 3.0"); #elif V2 Console.WriteLine("Version 2.0"); #else Console.WriteLine("Version 1.0"); #endif } 上面的代码会根据定义的符号来打印不同的版本信息。 这种方式成为条件编译。
注意:
使用#if不是条件编译代码的唯一方式,C#还提供了通过Conditional属性的机制。
#if和#elif还支持一组逻辑运算符!=,==,!=和 。如果符号存在,符号的值被认为是true,否则为false,如:
#if V3 (V2 == true) // if 定义了V3或V2符号...
3. #warning和#error
这也是两个很有用的预处理器指令,编译器遇到它们时,会分别产生警告或错误信息。如果遇到#warning指令,会向用户显示#warning指令后面的文本。实际上,在VS2005中,IDE会直接将信息标识出来:
而如果编译器遇到#error,就会立即退出编译,不会产生IL代码。
4. #region和#endregion
#region和#endregion指令用于把一段代码标记为有指定名称的一个块,如下所示:
#region private methods private int x; private int y; #endregion这两个指令不会影响编译过程。但可以为VS编辑器所识别,从而使得代码显示布局更为清晰。
5. #line
该指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。如果编写代码时,要使用某些软件包改变键入的代码,就可以使用这个指令。
6. #pragma,#pragma warning,#pragma checksum
#pragma:为编译器提供特殊的指令,说明如何编译包含杂注的文件。
#pragma warning:可启用或禁用某些警告。
#pragma checksum:生成源文件的校验和,以帮助调试ASP.NET页。
预处理器指令的开头都有符号#。
注意:
C#中并没有一个像C++那样的独立预处理器,所谓的预处理器指令仍由编译器处理。
下面将对这些指令逐一介绍。
1. #define和#undef
#define可以定义符号。当将符号用作传递给#if指令的表达式时,此表达式的计算结果true。如
#define DEBUG
它告诉编译器存在给定名称的符号,在本例中是DEBUG。这个符号不是实际代码的一部分,只在编译代码时存在。
#undef正好相反,它删除一个符号。
必须把#define和#undef命令放在C#源码的开头,即在要编译的任何代码之前。它不像C++中那样可以定义常数值。
#define本身并无大用,它需要配合#if指令使用。
2. #if, #elif, #else和#endif
这些指令告诉编译器是否要编译某个代码块。看下面的方法:
static void PrintVersion() { #if V3 Console.WriteLine("Version 3.0"); #elif V2 Console.WriteLine("Version 2.0"); #else Console.WriteLine("Version 1.0"); #endif } 上面的代码会根据定义的符号来打印不同的版本信息。 这种方式成为条件编译。
注意:
使用#if不是条件编译代码的唯一方式,C#还提供了通过Conditional属性的机制。
#if和#elif还支持一组逻辑运算符!=,==,!=和 。如果符号存在,符号的值被认为是true,否则为false,如:
#if V3 (V2 == true) // if 定义了V3或V2符号...
3. #warning和#error
这也是两个很有用的预处理器指令,编译器遇到它们时,会分别产生警告或错误信息。如果遇到#warning指令,会向用户显示#warning指令后面的文本。实际上,在VS2005中,IDE会直接将信息标识出来:
而如果编译器遇到#error,就会立即退出编译,不会产生IL代码。
4. #region和#endregion
#region和#endregion指令用于把一段代码标记为有指定名称的一个块,如下所示:
#region private methods private int x; private int y; #endregion这两个指令不会影响编译过程。但可以为VS编辑器所识别,从而使得代码显示布局更为清晰。
5. #line
该指令可以用于改变编译器在警告和错误信息中显示的文件名和行号信息。如果编写代码时,要使用某些软件包改变键入的代码,就可以使用这个指令。
6. #pragma,#pragma warning,#pragma checksum
#pragma:为编译器提供特殊的指令,说明如何编译包含杂注的文件。
#pragma warning:可启用或禁用某些警告。
#pragma checksum:生成源文件的校验和,以帮助调试ASP.NET页。
- 编程实例 C#中的预处理器指令
- C#中的预处理指令
- C# 预处理器指令
- C#预处理器指令
- C# 预处理器指令
- C#预处理器指令
- C#预处理器指令
- C# 预处理器指令
- C#预处理器指令
- C#预处理器指令
- C# 预处理器指令
- C#预处理器指令
- C#预处理器指令
- C#预处理器指令
- C#预处理器指令
- C#预处理器指令
- C# 预处理器指令
- C#预处理器指令(C#高级编程(第4版))
- windows xp里面的实用工具
- 灰姑娘的水晶鞋
- Java环境变量设置(适用于Windows 2000、XP、2003)及Windows JSP运行环境配
- 使ACCESS数据库保持同步
- 油笔poly建模+渲染,[补充新内容材质+渲染
- 编程实例 C#中的预处理器指令
- Window.ShowModalDialog使用手册
- 在Spring中集成Hibernate事务
- python集成开发环境Ulipad的安装指南
- 指针变量以及指针变量的类型转换问题
- 汇编输入排序输出示例
- 飞信协议-邀请与通话
- JAVA环境变量的设置
- self.location.href的具体用法