【C#】利用Conditional属性完成编译忽略

Conditional是.NET提供关于编译的属性描述,其作用是添加到方法或属上,通过定义编译符的方式告指示编译器应忽略方法调用或属性

  • 在我们的代码中经常会出现Console.WriteLint(“XXX”);类似的这种只在DEBUG模式下才输出的测试语句,实际发布中并没有意义
    1. 这里可能有同学会问,Debug和Release模式在哪里看?
    2. 我使用的是MonoDevelop编译器,一般在编译器的左上角运行符号的右边可以选择当前的运行模式
    3. 比如说,我们写的代码在测试的时候都属于Debug模式,如果将代码打包发布之后,就属于Release模式,那时候在控制台的输出语句就毫无意义

我们要做的事:某些方法在测试的时候可以运行,可以在控制台输出,发布之后自动失效


  • 情况1:编译器模式为Debug
using System;

// 1.需要引入该命名空间
using System.Diagnostics;

namespace Mars
{
    public class Person
    {
        // 2.作用是只有在Debug模式下才能编译Talk方法
        [Conditional ("DEBUG")]
        public void Talk ()
        {
            Console.WriteLine ("Talk方法成功调用");
        }

    }


    class MainClass
    {
        public static void Main (string[] args)
        {
            Person XiaoMing = new Person ();
            // 3.当前编译器为DEBUG模式,所以可以使用该方法
            XiaoMing.Talk ();


        }
    }
}
  • 输出结果:Talk方法成功调用
  • 结论:在编译器为Debug的模式下方法可以自动调用

  • 情况2:编译器模式为Release
using System;

// 1.需要引入该命名空间
using System.Diagnostics;

namespace Mars
{
    public class Person
    {
        // 2.作用是只有在Debug模式下才能编译Talk方法
        [Conditional ("DEBUG")]
        public void Talk ()
        {
            Console.WriteLine ("Talk方法成功调用");
        }

    }


    class MainClass
    {
        public static void Main (string[] args)
        {
            Person XiaoMing = new Person ();
            // 3.当前编译器为DEBUG模式,所以可以使用该方法
            XiaoMing.Talk ();// 注意:此处方法为灰色,无效状态


        }
    }
}
  • 输出结果:控制台无输出
  • 结论:在编译器为Release模式时,被[Conditional (“DEBUG”)]修饰的方法调用无效(编译器不调用)

所以就不需要使用#if DEBUG #endif来进行复杂的判断了,也不需要发布的时候删除之前的代码(这可真的让人头大…)

你可能感兴趣的:(【C#】)