Conditional是.NET提供关于编译的属性描述,其作用是添加到方法或属上,通过定义编译符的方式告指示编译器应忽略方法调用或属性
- 在我们的代码中经常会出现Console.WriteLint(“XXX”);类似的这种只在DEBUG模式下才输出的测试语句,实际发布中并没有意义
- 这里可能有同学会问,Debug和Release模式在哪里看?
- 我使用的是MonoDevelop编译器,一般在编译器的左上角运行符号的右边可以选择当前的运行模式
- 比如说,我们写的代码在测试的时候都属于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来进行复杂的判断了,也不需要发布的时候删除之前的代码(这可真的让人头大…)