第二十七式:C# 预处理器指令 (锦囊妙计)

绝世
秘籍
冲儿,有时候我们需要在开战之前(编译前)就决定用哪套剑法。
比如,如果是“比武大会”(Debug模式),我们就要手下留情;如果是“生死决斗”(Release模式),就要全力以赴。
这些写给编译器看的悄悄话,就是预处理器指令 (Preprocessor Directives)

1. #define 和 #if - 战前部署

所有指令都以 # 开头。它们不是真正的代码,不会被执行,而是在编译时决定哪些代码会被保留。


#define DEBUG_MODE // 定义一个暗号

using System;

class Program
{
    static void Main()
    {
#if DEBUG_MODE
        Console.WriteLine("现在是切磋模式,点到为止。");
#else
        Console.WriteLine("现在是决斗模式,不死不休!");
#endif
    }
}
        

如果你把第一行的 #define DEBUG_MODE 删掉(或者注释掉),编译器就会自动选择 #else 下面的代码,前面的代码就像从来没存在过一样。

2. #region 和 #endregion - 整理行囊

这招对代码逻辑没影响,纯粹是为了让代码整洁。可以把一大段代码折叠起来。


#region 华山剑法总纲
    public void Move1() { }
    public void Move2() { }
    // ... 还有100招
#endregion
        

在 VS Code 里,你可以点击左边的小箭头,把这几百行代码“收”进去,眼不见心不烦。

善用 #region!如果你把几千行代码堆在一起乱七八糟,连我都看不下去(虽然我更看重结果)。
整洁的代码也是一种修养!
🔖

动手时刻:双面间谍

编写一段代码:

  1. 使用 #if VIP 判断是否是 VIP 用户。
  2. 如果是,输出“欢迎大爷!”;否则输出“去去去,一边去!”。
  3. 尝试添加和删除 #define VIP,观察输出的变化。
查看参考答案

#define VIP // 试着注释掉这一行

class Program {
    static void Main() {
#if VIP
        Console.WriteLine("欢迎大爷!");
#else
        Console.WriteLine("去去去,一边去!");
#endif
    }
}
                    

成就解锁:【谋士】 获得:锦囊三个