首页 > 编程语言 >C#预处理指令 #XXX

C#预处理指令 #XXX

时间:2024-02-23 23:44:37浏览次数:20  
标签:定义 符号 C# 代码 XXX 编译 指令 预处理

详见:https://learn.microsoft.com/zh-CN/dotnet/csharp/language-reference/preprocessor-directives

预处理指令简介

C#中可使用这些指令来帮助条件编译。 不同于 C 和 C++ 指令,不能使用这些指令来创建宏。 预处理器指令必须是一行中唯一的说明。  

分类详情

1.可为空上下文#nullable

#nullable 预处理器指令将设置可为空注释上下文和可为空警告上下文 。 此指令控制是否可为空注释是否有效,以及是否给出为 Null 性警告。 每个上下文要么处于已禁用状态,要么处于已启用状态 。 具体使用场景待续  

2.条件编译#if

C#使用四个预处理器指令来控制条件编译:
  • #if:打开条件编译,其中仅在定义了指定的符号时才会编译代码
  • #elif:关闭前面的条件编译,并基于是否定义了指定的符号打开一个新的条件编译。
  • #else:关闭前面的条件编译,如果没有定义前面指定的符号,打开一个新的条件编译。
  • #endif:关闭前面的条件编译。
仅在定义了指定的符号时(或使用 ! 、not 未定义指定的符号时),C# 编译器才会编译 #if 指令和 #endif 指令之间的代码。 与 C 和 C++ 不同,不能将数字值分配给符号。 C# 中的 #if 语句是布尔值,且仅测试是否已定义该符号。  

条件编译使用场景

使用条件编译语句可以在UNITY打包编译导出、在编辑器中运行前编译时,根据要编译的平台(如PC、安卓、IOS)来决定要编译哪段代码 UNITY提供了一些自带的符号定义,生成(build)系统会感知表示 SDK 样式项目中不同目标框架的预定义预处理器符号。 在创建可以面向多个 .NET 版本(多个目标平台)的应用程序时,这些符号会很有用。 例如,只有在定义了符号 DEBUG 时将编译以下代码:
#if DEBUG
    Console.WriteLine("Debug version");
#endif
未定义 MYTEST 时,将编译以下代码:
#if !MYTEST
    Console.WriteLine("MYTEST is not defined");
#endif
条件编译语句中可使用如下逻辑运算符 可以使用运算符 ==(相等)!=(不相等)来测试 bool 值是 || (or) 和 !(not) 运算符来计算是否已定义多个符号。 还可以用括号对符号和运算符进行分组。   #if 以及 #else#elif#endif#define#undef 指令,可以基于是否存在一个或多个符号来选择性编译代码。 条件编译在编译调试版本的代码或编译特定配置的代码时会很有用。  

3.定义区域#region

(用于折叠代码大纲) 可以使用以下两个预处理器指令来定义可在大纲中折叠的代码区域:
  • #region:启动区域。
  • #endregion:结束区域。
利用

标签:定义,符号,C#,代码,XXX,编译,指令,预处理
From: https://www.cnblogs.com/jk-2048/p/18030591

相关文章

  • 刘铁猛C#学习笔记18 重写与多态
    重写override子类中重新定义父类中已有的方法重写语法需要在要重写的父类方法添加一个virtual修饰符(虚方法)在子类中的同名方法添加一个override修饰符 子类中添加新的成员,是继承中对父类的横向扩展重写不添加新成员,而是增加已有成员的新版本,可以看着对父类的纵向扩展......
  • 刘铁猛C#学习笔记19 抽象类、接口与SOLID五大原则
    接口与抽象类是所有高阶面向对象的起点,是学习设计模式的前置条件必须有实践基础之后,才能真正掌握算法、设计模式 设计模式的基础solid五大设计原则(待续)1.单一职责原则singleresponsibilityprinciple2.开放-关闭原则Open-closeprinciple,简称为开闭原则“封装确定的,......
  • 刘铁猛C#学习笔记21 反射与依赖注入
    反射对于一个现有对象,能够在不使用new操作符、不知道其具体静态类型的情况下,创建出一个同类型的对象,还能访问这个复制品对象拥有的各个成员。相当于进一步的解耦,可以不使用new操作符,就没有类型的依赖关系这样的耦合关系甚至可以弱到忽略不计反射在.NET和JAVA中非常重要 ......
  • C#数据结构 字典Dictionary
    简介字典是C#开发中经常使用的一种键值对容器,类似C++的map,可使用foreach或迭代器遍历不能装多个相同key,底层实现是哈希函数具体用法1.创建Dictionary<key,value>//Key和Value可以是任意类型Dictionary<int,string>_testDic=newDictionary<int,string>();2.添加......
  • 刘铁猛C#学习笔记13 委托1
    “幻想:如果能有一种能把方法当参数的方法就好了”一、什么是委托委托源自C、C++中的函数指针 1.C语言中的函数指针(1)函数的直接调用先准备好一个加法函数,一个减法函数可以通过函数名调用这两个函数,这种调用方法称作直接调用 (2)函数指针的声明、间接调用先按下......
  • C++ 令人无语/好用的语法合集
    此贴用来总结一些傻逼C++语法,或者坑了我很久的写法。1、(坑)重载>,<,==时,千万不要使用pair为基的typedef!!!!!!pii的max不受你的重载影响,它自己有自己的max,然后typedef和define是相同的,基本可以看做直接替换,不会对作用域/命名做区分。2、(坑)lower_bound(..,..,{x......
  • containerd环境搭建指南
    目录一.container概述1.什么是containerd2.为什么要学习containerd二.基于yum方式安装containerd1.获取软件源2.查看yum源中containerd软件版本3.安装containerd的4.查看containerd的版本信息5.设置containerd开机自启动6.查看containerd的客户端和服务端的版本信息三.基于二进制......
  • SciTech-EECS-PCB电路板设计-使用KiCad进行PCB设计的基本流程
    使用KiCad进行PCB设计的基本流程,2024-02-2314:04KiCad是一款强大的开源PCB设计软件,其设计的大体流程包括:原理图设计及导出网表文件,PCB布局和布线,导出Gerber文件及制板;以下是使用KiCad进行PCB设计的基本步骤:0.安装KiCad:首先,你需要安装KiCad软件。KiCad官方网站下载......
  • 刘铁猛C#学习笔记10 字段、属性
    这四种东西都是用来表达数据的一、字段(成员变量)曾用名:成员变量是为一个对象或类型存储数据的变量,区别于方法体中的局部变量多个字段组合起来可以表示对象当前的状态起源:C语言中结构体的成员变量一个对象占用的内存空间会被分配给各个字段1.实例字段和静态字段可以分为......
  • 刘铁猛C#学习笔记11 索引器、常量
    一、索引器[]概述使一个对象可以像数组一样用方括号[]去访问其元素ex:字典的声明 1.索引器的声明首先像上文那样声明一个字典Dictionary<,>在VS中输入indexer,然后敲两下tab就能得到:(按下tab可以跳到下一个可编辑项上)第一个类型参数为返回值的类型,第二个类型参数为......