C#预处理器指令的用法实例分析

 更新时间:2014年11月12日 11:08:32   投稿:shichen2014  
这篇文章主要介绍了C#预处理器指令的用法,以实例形式较为详细的分析了预处理器指令的原理与相应的用法,有助于深入理解C#程序的运行原理,需要的朋友可以参考下

本文实例讲述了C#预处理器指令的用法。分享给大家供大家参考。具体用法分析如下:

C#预处理器指令是在编译时调用的。预处理器指令(preprocessor directive)告诉C#编译器要编译哪些代码,并指出如何处理特定的错误和警告。C#预处理器指令还可以告诉C#编辑器有关代码组织的信息。

1. 定义符号和取消符号定义的预处理指令#define 和 #undef

预处理指令都以#号开头并位于行首前面可以出现空格符。

复制代码 代码如下:
#define DEBUG
#define ISSAY
 
上面的语句定义了连个个预编译的符号,他的作用域是他所处整个文件,定义符号的语句必须出现在所有代码之前, 否则编译的时候会出现一个异常: 不能在文件的第一个标记之后,定义或取消定义预处理器符号 。我们也可以使用#undef来取消一个符号的定义,先来看个例子。
复制代码 代码如下:
#define DEBUG
#undef DEBUG
#define ISSAY  
 
using System;  
namespace JustDoIt  
{  
    class Program  
     {  
        static void Main(string[] args)  
         {
             #if DEBUG  
             Console.Write("debug.");
             #endif
             #if ISSAY  
             Console.Write("hello.");
         #else  
             Console.Write("you can say nothing.");
             #endif  
 
         Console.ReadLine();  
         }  
     }  
}  
//输出:hello

从上面的代码我们可以看到第一样等一了符号DEEBU,紧接着第二行取消了这个符号的定义,也就是相当于没有定义一样,所以程序运行的时候不会执行Console.Write("debug.")这个语句。第三行定义了ISSAY符号,所以程序输出了“hello”,如果我们把他注释了或者是删除了,那么程序会输出“you can say nothing“。我们可以初步看到通过定义预编译的符号,可以控制编译器选择性地编译代码。上面的代码中还有#if和#endif这样的符号,这些是条件编译指令。

2. 条件编译指令

条件编译指令有4个,除了我们从第一个示例看到的#if、#else、#endif之外,还有一个#elif。我们对这些指令应该有是曾相识的感觉,他们跟我们平时编写代码的时候试用的条件语句是一样的,条件语句是用来控制程序流的,而这些条件编译指令是用来控制编译器选择性地编译代码的。

一条#if语句可以有0条或多条#elif语句,也可以有0条或一条#else 语句,但必须包括一条#endif语句必须有,否则会出现语法错误。

3. #region和#endregion

这两个符号平时我们肯定用的很多了,就是把一些相关的代码折叠到一起,这样对我们在一个文件中编写较长的代码非常有用,我们可以把一组相关的代码用#region和#endregion组织在一起并且可以在#region后面加上说明的文字,当这组代码被折叠起来的时候,我们可以看到#region后面的说明文字。

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • c#编写webservice服务引用实例分享

    c#编写webservice服务引用实例分享

    c#编写webservice服务引用实例分享,大家参考使用吧
    2013-12-12
  • 在C#项目中调用C++编写的动态库的三种方式

    在C#项目中调用C++编写的动态库的三种方式

    这篇文章给大家介绍了三种方式详解如何在C#项目中调用C++编写的动态库,文中通过代码示例给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • C#中多线程ManualResetEvent 与 AutoResetEvent 区别

    C#中多线程ManualResetEvent 与 AutoResetEvent 区别

    这篇文章主要介绍了C#中ManualResetEvent 与 AutoResetEvent 区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C#采用Winform实现类似Android的Listener

    C#采用Winform实现类似Android的Listener

    这篇文章主要介绍了C#采用Winform实现类似Android的Listener,很实用的技巧,需要的朋友可以参考下
    2014-08-08
  • C#使用日志组件log4net

    C#使用日志组件log4net

    这篇文章介绍了C#日志组件log4net的使用方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    C#实体对象序列化成Json并让字段的首字母小写的两种解决方法

    这篇文章主要介绍了C#实体对象序列化成Json并让字段的首字母小写的两种方法,在这两种方法中小编比较推荐使用第二种方法,需要的朋友可以参考下
    2018-06-06
  • C#中事件的继承实例分析

    C#中事件的继承实例分析

    这篇文章主要介绍了C#中事件的继承,通过一个面向对象程序实例来说明子类调用父类事件的实现方法,需要的朋友可以参考下
    2014-08-08
  • 人脸认证源码faceIdentify详解

    人脸认证源码faceIdentify详解

    这篇文章主要为大家详细介绍了人脸认证源码faceIdentify的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • C#无限参数的写法

    C#无限参数的写法

    这篇文章主要介绍了C#无限参数的写法,通过循环遍历再结合paras.Add方法实现无限参数的功能,是比较实用的技巧,需要的朋友可以参考下
    2014-12-12
  • unity自带寻路(导航)系统 Nav Mesh导航网格

    unity自带寻路(导航)系统 Nav Mesh导航网格

    这篇文章主要为大家详细介绍了unity自带寻路(导航)系统,Nav Mesh导航网格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论