C# #define条件编译

C# #define条件编译

C#中条件编译指令用于按条件包含或排除源文件中的某些部分。

一、C# #define可以用来做什么

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

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

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

二、#define用法

#define Debug

说明

1、Debug可以看做是声明的一个变量,但此变量没有真正的值,仅存在。

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

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

三、#define条件编译实例

方式一、使用#if

  •  
  • 
    #define ABC
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 条件编译
    {
        class Program
        {
            static void Main(string[] args)
            {
    #if ABC
                int a = 1;
    #else
                int a = 2;
    #endif
                Console.WriteLine(a);
            }
        }
    }
    
    		
  • 方式二、使用Conditional特性

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

  •  
  • C# 代码   复制
  • 
    
    #define DebugAndTrace
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    
    namespace ConsoleApplication3
    {
        class Program
        {
            static void Main(string[] args)
            {
                Print1();
                Print2();
                Print3();
            }
    
            [Conditional("DEBUG")]
            static void Print1()
            {
                Console.WriteLine("You defined the Debug parameter");
            }
    
            //定义了Debug或者Trace后才会执行
            //或者的关系
            [Conditional("Debug"), Conditional("Trace")]
            static void Print2()
            {
                Console.WriteLine("You defined the Debug or Trace parameter");
            }
    
    
            //只有定义了Debug和Trace后才会执行此方法
            [Conditional("DebugAndTrace")]
            static void Print3()
            {
                Console.WriteLine("You defined the Debug and Trace parameter");
            }
        }
    }
    
    		
  • 条件方法要受到以下限制

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


    2、条件方法必须具有 void 返回类型。


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


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

    标签: