zoukankan      html  css  js  c++  java
  • Docs-.NET-C#-指南-语言参考-预处理器指令:#if 预处理指令

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#if 预处理指令
    1.返回顶部
    1、

    #if(C# 参考)

    如果 C# 编译器遇到 #if 指令,最终是 #endif 指令,则仅当定义指定的符号时,它才编译这些指令之间的代码。 与 C 和 C++ 不同,你不能为符号分配数字值。 C# 中的 #if 语句是布尔值,且仅测试是否已定义该符号。 例如:

    C#
    #if DEBUG
        Console.WriteLine("Debug version");
    #endif

    仅可以使用运算符 ==(相等)和 !=(不相等)测试 true 或 false。 True 表示定义该符号。 语句 #if DEBUG 具有与 #if (DEBUG == true) 相同的含义。 可以使用运算符 && (and)、|| (or) 和 ! (not) 评估是否已经定义了多个符号。 还可以用括号对符号和运算符进行分组。

    备注

    #if 以及 #else#elif#endif#define 和 #undef 指令,允许基于是否存在一个或多个符号包括或排除代码。 这在编译调试版本的代码或编译特定配置的代码时会很有用。

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

    #define 允许你定义一个符号。 然后通过将该符号用作传递给 #if 指令的表达式,该表达式的计算结果为 true

    还可以通过 -define 编译器选项来定义符号。 可以通过 #undef 取消定义符号。

    使用 -define 或 #define 定义的符号与具有相同名称的变量不冲突。 也就是说,变量名称不应传递给预处理器指令,且符号仅能由预处理器指令评估。

    使用 #define 创建的符号的作用域是在其中定义它的文件。

    此外,生成系统还会感知表示不同目标框架的预定义预处理器符号。 在创建可以面向多个.NET 实现或版本的应用程序时,这些符号会很有用。

    目标框架符号
    .NET Framework NETFRAMEWORKNET20NET35NET40NET45NET451NET452NET46NET461NET462NET47NET471NET472NET48
    .NET Standard NETSTANDARDNETSTANDARD1_0NETSTANDARD1_1NETSTANDARD1_2NETSTANDARD1_3NETSTANDARD1_4NETSTANDARD1_5NETSTANDARD1_6NETSTANDARD2_0NETSTANDARD2_1
    .NET Core NETCOREAPPNETCOREAPP1_0NETCOREAPP1_1NETCOREAPP2_0NETCOREAPP2_1NETCOREAPP2_2NETCOREAPP3_0

    其他预定义符号包括 DEBUG 和 TRACE 常量。 你可以使用 #define 替代项目的值集。 例如,会根据生成配置属性(“调试”或者“发布”模式)自动设置 DEBUG 符号

    示例

    下例显示如何在文件上定义 MYTEST 符号,然后测试 MYTEST 和 DEBUG 符号的值。 此示例的输出取决于是在“调试”还是“发布”配置模式下生成项目。

    C#
    #define MYTEST
    using System;
    public class MyClass
    {
        static void Main()
        {
    #if (DEBUG && !MYTEST)
            Console.WriteLine("DEBUG is defined");
    #elif (!DEBUG && MYTEST)
            Console.WriteLine("MYTEST is defined");
    #elif (DEBUG && MYTEST)
            Console.WriteLine("DEBUG and MYTEST are defined");  
    #else
            Console.WriteLine("DEBUG and MYTEST are not defined");
    #endif
        }
    }

    下例显示如何针对不同的目标框架进行测试,以便在可能时使用较新的 API:

    C#
    public class MyClass
    {
        static void Main()
        {
    #if NET40
            WebClient _client = new WebClient();
    #else
            HttpClient _client = new HttpClient();
    #endif
        }
        //...
    }

    请参阅

    2、
    2.返回顶部
     
    3.返回顶部
     
    4.返回顶部
     
    5.返回顶部
    1、
    2、
     
    6.返回顶部
     
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    hdu 1863
    数据结构与算法分析–Minimum Spanning Tree(最小生成树)
    hdu 1856 More is better
    hdu 1272 小希的迷宫
    数据结构与算法分析 – Disjoint Set(并查集)
    数字逻辑电路课程设计报告
    高校成绩管理数据库系统的设计与实现
    PL/0编译器(java version) – SymbolTable.java
    [jquery]添加行内容后根据下拉菜单选择内容对比之前已有选项,若有重置再提示
    bootstrap-datetimepicker 日期控件的开始日期
  • 原文地址:https://www.cnblogs.com/storebook/p/11835375.html
Copyright © 2011-2022 走看看