C# 预编译指令

#define、#undef

#define:用来定义符号,将符号用作传递给 #if 指令的表达式时,该表达式的计算结果为 true
#undef:用来定义符号将符号用作传递给 #if 指令的表达式时,该表达式的计算结果为 false
一般配合:#if、#elif 来使用,还可以使用 ConditionalAttribute 来执行条件编译
定义符号的预处理指令,必须出现在文件的最开始位置,否者会出现错误:不能在文件的第一个标记之后定义或取消定义预处理器符号
作用域是这两个指令所处的整个文件,不论文件中包含多少命名空间、类、方法等。处于不同文件的局部类也不能共用。

Index.cs
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
#define DEBUG
#undef DEBUG
#define SHOW
#undef HIDE 

using System;

namespace PreprocessorDirective.Define_Undef
{
    public class Index
    {
        public void Test()
        {
#if DEBUG
            // #define 指令定义 DEBUG,#undef 又取消了 DEBUG 的定义
            // 所以不会输出:Debug
            Console.WriteLine("Debug");  
#endif

#if SHOW
            // #define 指令定义 SHOW
            Console.WriteLine("Show");
#else
            Console.WriteLine("Not Show");
#endif

#if HIDE
            
            Console.Write("HIDE");
#else
            // #undef 指令定义 HIDE
            Console.WriteLine("Not Hide");
#endif

#if RELEASE
            // 没有指令定义 RELEASE
            Console.WriteLine("Release");
#endif
        }
    }
}


Other.cs
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
using System;

namespace PreprocessorDirective.Define_Undef
{
    public partial class Other
    {
        public void Test()
        {
#if SHOW
            Console.Write("Show");
#else
            // 在另一个文件判断 SHOW
            // 说明指令的范围只是在当前文件中
            Console.Write("Not Show");
#endif
        }
    }
}


Partial.cs
----- ----- ----- ----- ----- ----- ----- ----- ----- -----
#define SHOW

using System;

namespace PreprocessorDirective.Define_Undef
{
    public partial class Other
    {
        public void PartialTest()
        {
#if SHOW
            // 在本文件中定义 SHOW,不同文件中的局部类同样不能使用
            Console.Write("Show");
#else

            Console.Write("Not Show");
#endif
        }
    }
}

#if、#else、#elif、#endif

以 #if 指令开头的条件指令必须以 #endif 指令显式终止。

#warning、#error

配合 #if 编辑器用来进行提示

#region和#endregion

把相关代码折叠到一起,#region 后面可以添加说明,折叠后会显示出来

#line

#line 200:用来指定当前行号为200,那么下一行就是201,以此类推增加
#line default:用来恢复本来的行号
#line hidden:不会影响行号,但是调试的时候会跳过调试,即使打上了断点

#pragma、#pragma warning、#pragma error

你可能感兴趣的