2019-8-31-C#-条件编译

titleauthordateCreateTimecategories
C# 条件编译
lindexi
2019-08-31 16:55:58 +0800
2019-07-18 15:27:12 +0800
C#

有一部分代码只是用来调试使用,不期望在发布的时候执行。也有一些代码只是用来测试性能,也不期望在其他时候使用。在做源代码包的时候,我需要对不同的平台使用不同的代码。此时就可以用到条件编译符,在不同的条件下编译不同的代码

和 C++ 差不多,在 C# 里面也有宏的概念,只是在 C# 里面的专业名词是条件编译符

通过 #if #else 这些预处理器指令,可以指定使用不同的代码参加编译

用法是在 #if 后面跟上条件判断逻辑,只要条件判断逻辑返回 true 那么在 #if 包含的范围内的代码将会参加编译

#if 包含的范围内指的是在 #if 和下一个 #else#elif#endif 指令之间的范围,和普通的条件判断逻辑相同

#if NET45

// 添加代码
// 如果定义了 NET45 这个宏,那么在这个范围内的代码将会参加编译

#elif NET46

// 如果没有定义 NET45 这个宏,那么将会进入这个分支的判断,如果定义了 NET46 这个宏那么在这个范围内的代码将会参加编译

#else 

// 在上面的判断都不成立的时候,在这个范围内的代码将会参加编译

#endif

上面是使用最长的判断代码,而更多的只是其中的组合,如 #if xx#endif 的代码

例如我指定了在 DEBUG 模式,也就是调试模式下执行和发布模式不同的输出

public void Foo()
{
#if DEBUG
    Console.WriteLine("Debug version");
#endif
}

在有定义 DEBUG 宏的编译时候,也就是一般在调试的时候,将会编译下面代码

public void Foo()
{
    Console.WriteLine("Debug version");
}

而在没有定义 DEBUG 条件编译符的时候,将会编译下面的代码

public void Foo()
{
    
}

可以注意到 Console.WriteLine("Debug version"); 没有在没有定义 DEBUG 的时候参加编译,这段代码将被忽略

这样就是预处理器指令命名的原因,表示在编译之前做的指令

在进行判断是否进行编译的时候,支持使用复杂的条件判断,包括使用运算符 ==(相等)和 !=(不相等)判断逻辑,在使用运算符的左边是对应的宏,右边是 true 和 false 两个值,其中 true 表示存在这个宏的定义,如下代码

#if DEBUG == true
#endif

上面代码的 #if DEBUG == true#if DEBUG 是等价写法

另外还支持运算符 && (and) || (or) 和 ! (not) 连接多个判断

此时的 #if DEBUG == false#if !DEBUG 是等价判断

在使用连接符号的时候,支持添加 == 等判断运行符,也支持直接写条件编译符,如下代码

#if NET45 || DEBUG == true
            // 在 NET45 定义或 DEBUG 定义的时候,这个范围内的代码可以执行
#endif

多个条件同时判断可以使用括号包含判断,请看代码

#if NET46 || (DEBUG == true && NET47)
#endif

在定义了 NET46 或同时定义了 DEBUG 和 NET47 编译范围代码

更多预定义宏请看dotnet 新项目格式与对应框架预定义的宏

#if 预处理器指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值