c# define 类似_C#---#define条件编译

本文导读:

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

1 #define Debug

说明:

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

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

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

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

三、#define条件编译实例

方式一、使用#if

1 #define Dragon

2 using System;

3 using System.Collections.Generic;

4 using System.Linq;

5 using System.Text;

6 using System.Diagnostics;

7

8 namespace ConditionalCompilation

9 {

10 class Program

11 {

12 static void Main(string[] args)

13 {

14 #if Dragon

15 Console.WriteLine("Dragon is defined");

16 #else

17 Console.WriteLine("Dragon is not defined");

18 #endif

19 Console.ReadKey();

20 }

21 }

22 }

输出结果如下:

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

方式二、使用Conditional特性

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

1 #define Debug

2 #define Trace

3 #if (Debug && Trace)

4 #define DebugAndTrace

5 #endif

6 using System;

7 using System.Collections.Generic;

8 using System.Linq;

9 using System.Text;

10 using System.Diagnostics;

11

12 namespace ConditionalCompilation

13 {

14 class Program

15 {

16 static void Main(string[] args)

17 {

18 Print0();

19 Print1();

20 Print2();

21 Print3();

22 Console.ReadKey();

23 }

24

25 [Conditional("DEBUG")]

26 static void Print0()

27 {

28 Console.WriteLine("DEBUG is defined");

29 }

30

31 [Conditional("Debug")]

32 static void Print1()

33 {

34 Console.WriteLine("Debug is defined");

35 }

36

37 //定义了Debug或者Trace后才会执行此方法

38 //或者的关系

39 [Conditional("Debug"), Conditional("Trace")]

40 static void Print2()

41 {

42 Console.WriteLine("Debug or Trace is defined");

43 }

44

45 //只有定义了Debug和Trace后才会执行此方法

46 //并且的关系

47 [Conditional("DebugAndTrace")]

48 static void Print3()

49 {

50 Console.WriteLine("Debug and Trace is defined");

51 }

52 }

53 }

输出结果如下:

说明:

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间接来完成,如示例代码中的组合操作

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

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

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

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

http://www.cnblogs.com/Scl891004X/p/6147787.html#undefined

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值