用条件属性而不是#if

总结:编译器使用Conditional特性来帮助开发者使用#if   #endif 而产生常规错误。条件特性比起预处理,它为区分条件代码提供了更好的区分

   使用#if   #endif可以在同样源码上生成不同的编辑(结果),通常是调式(debug)和发布(release)版本。

   条件特性比条件编辑#if  #endif更加清晰明白,所有优秀使用Conditional attribute

Item 4:使用Conditional特性,避免#if条件编译 Use Conditional Attributes Instead of #if

   但是#if/#endif很容易被滥用,使得编写的代码难以理解和调式,所以C#提供了条件特性(Conditional attribute)来识别哪些方法可以根据环境设置来判断是否应该被调用。

  • 不管DEBUG环境变量是否被定义,CheckState()方法总会被编译且存在于程序集中。这或许看上去是低效的,但这只是占用一点硬盘空间,CheckState()函数不会被载入到内存,更不会被JITed。 Whether the DEBUG environment variable is defined or not, the CheckState() method is compiled and delivered with the assembly. That might seem inefficient, but the only cost is disk space. The CheckState() function does not get loaded into memory and JITed unless it is called.
  • 你也可以创建一个依赖于更多环境变量的变量。多条件时是以OR的形式并列的。下面这个版本的CheckState会在DEBUG或者TRACE为真时被调用。You can also create methods that depend on more than one environment variable. When you apply multiple conditional attributes, they are combined with OR. For example, this version of CheckState would be called when either DEBUG or TRACE is true

    [Conditional("DEBUG"),
    Conditional("TRACE")]
    private void CheckState()
    
  • 条件属性只能在整个方法中应用,而且返回值只能是void。The Conditional attribute can be applied only to entire methods

本文由金沙官网线上发布于编程,转载请注明出处:用条件属性而不是#if

您可能还会对下面的文章感兴趣: