本文主要讲述C#中,使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景。 本文参考了c# Conditional用法详解和.NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景 条件编译符号和预处理符号我们有时会使用 #if DEBUG 或者 [Conditional("DEBUG")] 来让我们的代码仅在特定的条件下编译。 而这里的 DEBUG 是什么呢? 在我们编写的 C# 代码中,这个叫做 “条件编译符号”(Conditional compilation symbols) 对于C#,与 C 和 C++ 不同,您不能对符号赋予数值;C# 中的 #if 语句是 Boolean,仅测试符号是否已定义。 在项目ConsoleApp1设置中的生成中定义一个条件编译符号CONDITIONA。 下面请看ConsoleApp1的示例 using System;
namespace ConsoleApp1 { public class Class1 { [Conditional("CONDITIONA")] public static void Hello1() { Console.WriteLine("Hello,我是Conditional条件下才可以执行的函数1"); }
public static void Hello2() { #if CONDITIONA Console.WriteLine("Hello,我是#if条件下才可以执行的函数语句2"); #endif } }
class Hello { static void Main(string[] args) { Class1.Hello1(); Class1.Hello2(); Console.ReadKey(); } } }
执行结果 由此,我们得到了#if与Conditional的第一个区别: 这也引出了#if与Conditional的第二个区别: 上面是博主吕毅的官方解释,我这里举个例子吧。 写一个新类 using System; using ConsoleApp1;
namespace ConsoleApp2 { class Program { static void Main(string[] args) { Class1.Hello1();//Class1是ConsoleApp1中的类 Class1.Hello2(); Console.ReadKey(); } } }
关键就在于设置这个条件编译变量上 实验: 不为ConsoleApp1项目设置CONDITIONA,为ConsoleApp2项目设置CONDITIONA。 为ConsoleApp1项目设置CONDITIONA,为ConsoleApp2项目设置CONDITIONA。 以此为例,就可以深刻体会以下的结论了: 用Conditional属性的方式,方法是否生效是取决于调用方,而用#if方式,方法是否生效是取决于方法定义所在的程序集。 |
|
来自: ontheroad96j47 > 《待分类》