• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C# #define条件编译详解

C# #define条件编译详解

作者:邪心魔佛一页书 字体:[增加 减小] 来源:互联网 时间:2017-05-28

邪心魔佛一页书 通过本文主要向大家介绍了等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文导读:

C#的预处理器指令从来不会转化为可执行代码的命令,但是会影响编译过程的各个方面,常用的预处理器指令有#define、#undef、#if,#elif,#else和#endif等等,下面介绍C#中使用#define进行条件编译的实例。

C#中条件编译指令用于按条件包含或排除源文件中的某些部分。在Visual Studio中,会看到被排除的代码显示为灰色。

一、#define可以用来做什么

1、当计划发布两个版本的代码的时候。即基本版和拥有更多版本的企业版,就可以用到条件编译指令;

2、例如同一个文件给silverlight、wpf、winform等使用,并且还考虑Debug和Release等,有大部分代码是一样的;

3、指定函数和属性是否编译到最终产品中去。

二、#define用法

语法:#define 名称

注意:这里名称取Debug,你也可以取其他名称如Dragon

#define Debug

说明:

1、Debug可以看做是声明的一个变量,但此变量没有真正的值,存在时#if Debug结果为true,否则为false;

2、#define单独用没什么意义,一般是和#if或者Conditional特性结合使用;

3、#define必须定义在所有using命名空间前面;

4、Debug与DEBUG是不同的,C#区分大小写。

三、#define条件编译实例

方式一、使用#if

#define Dragon
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConditionalCompilation
{
  class Program
  {
    static void Main(string[] args)
    {
#if Dragon
      Console.WriteLine("Dragon is defined");
#else
      Console.WriteLine("Dragon is not defined");
#endif
      Console.ReadKey();
    }
  }
}
</div>

输出结果如下:

如果注释掉 //#define Dragon ,输出结果为:

方式二、使用Conditional特性

我们可以将一些函数隔离出来,使得它们只有在定义了某些环境变量或者设置了某个值之后才能发挥作用,使用Conditional特性的隔离策略要比#if/#endif不容易出错。

#define Debug
#define Trace
#if (Debug && Trace)
#define DebugAndTrace
#endif
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConditionalCompilation
{
  class Program
  {
    static void Main(string[] args)
    {
      Print0();
      Print1();
      Print2();
      Print3();
      Console.ReadKey();
    }

    [Conditional("DEBUG")]
    static void Print0()
    {
      Console.WriteLine("DEBUG is defined");
    }

    [Conditional("Debug")]
    static void Print1()
    {
      Console.WriteLine("Debug is defined");
    }

    //定义了Debug或者Trace后才会执行此方法
    //或者的关系
    [Conditional("Debug"), Conditional("Trace")]
    static void Print2()
    {
      Console.WriteLine("Debug or Trace is defined");
    }

    //只有定义了Debug和Trace后才会执行此方法
    //并且的关系
    [Conditional("DebugAndTrace")]
    static void Print3()
    {
      Console.WriteLine("Debug and Trace is defined");
    }
  }
}
</div>

输出结果如下:

说明:

1、代码中没有定义DEBUG,却输出了DEBUG,是因为DEBUG版本,自动定义了DEBUG。“项目——右键——属性——生成选项卡——常规栏”下的定义 DEBUG 常量(U)前面的复选框被选中。当然你可以去掉其选中状态,这样就不会输出DEBUG了。

2、如果Debug和Trace均没有定义,则不会输出Debug or Trace;只有Debug和Trace均定义了,才会输出Debug and Trace。

3、可以给Conditional增加多个属性如示例代码 [Conditional("Debug"), Conditional("Trace")] ,不过多个属性之间的关系是或的关系,即“Debug”或者“Trace”任意一个被定义了,那么对应方法就会被执行。

4、如果需要增加多个与的属性,直接用Conditional是无法实现的,需要借助#if/#endif间接来完成,如示例代码中的组合操作

#if (Debug && Trace)
#define DebugAndTrace
#endif
</div>

使用Conditional属性的方法受到以下限制:

1、条件方法必须是类声明或结构声明中的方法。如果在接口声明中的方法上指定Conditional属性,将出现编译时错误;

2、条件方法不能是接口方法的实现。否则将发生编译时错误;

3、条件方法必须具有void返回类型;

4、不能用override修饰符标记条件方法。但是,可以用virtual修饰符标记条件方法。此类方法的重写方法隐含为有条件的方法,而且不能用Conditional属性显式标记。

环境变量(或条件编译符号)的设置方法有三:

1)用#define定义以及#undef取消定义,在所有using命名空间前面定义;

2)用编译器命令行选项(例如,/define:DEBUG),在“项目——右键——属性——生成选项卡——常规栏”下的条件编译符号(Y)中设置(如果多个,可以用英文逗号隔开)。DEBUG版本下,系统默认设置了DEBUG和TRACE;

3)用操作系统外壳程序中的环境变量(例如,set DEBUG=1)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28C#实现统计字数功能的方法
  • 2017-05-28.net(c#)中的new关键字详细介绍
  • 2017-05-28C#获取并修改文件扩展名的方法
  • 2017-05-28C# Memcached缓存用法实例详解
  • 2017-05-28C#各种数组的用法实例演示
  • 2017-05-28解决安装VS2008无法更改默认路径的问题
  • 2017-05-28解析C#中委托的同步调用与异步调用(实例详解)
  • 2017-05-28C#省份城市下拉框联动简单实现方法
  • 2017-05-28C#实现集合转换成json格式数据的方法
  • 2017-05-28NGUI实现滑动翻页效果实例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用windows控制台调试服务的方法
    • 在C#中 webbrowser的使用心得
    • 判断图片-判断位图是否是黑白图片的方法
    • C#导出GridView数据到Excel文件类实例
    • c#对list排序示例
    • C#检测pc光驱里是否插入了光盘的方法
    • C# 中GUID生成格式的四种方法
    • C# 向Word中设置/更改文本方向的方法(两种)
    • C#基础语法:Base关键字学习笔记
    • C#判断字符串是否存在字母及字符串中字符的替换实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有