.net 预处理指令符的使用详解

什么是预处理指令符?

当C#编译器找到一条预处理指令#if,最后找到一条指令时,#endif仅在定义了指定符号的情况下,编译器才会在这些指令之间编译代码。与C和C ++不同,您不能将数字值分配给符号。#if C#中的语句为布尔型,仅测试符号是否已定义。

预处理指令符的使用

  • #if:打开条件编译,仅在定义了指定符号的情况下才编译代码。
  • #elif:根据是否定义了指定的符号,关闭前面的条件编译并打开新的条件编译。
  • #else:如果未定义先前指定的符号,则关闭之前的条件编译并打开新的条件编译。
  • #endif:关闭前面的条件编译。

条件编译(编译器会根据不同配置环境来执行):

#if DEBUG
      Console.WriteLine("我是debug 模式!");
#elif RELEASE
      Console.WriteLine("我是relsease 模式!");
#else
      Console.WriteLine("我是自定义模式!");
#endif
      Console.WriteLine("我是没有被任何预处理过得输出!");

当前解决方案编译环境为Debug

输出结果:

常用指令符:

自定义指令符

举例:我们需要两个版本的代码,基础版、更多功能的企业版本。此时我们就可以通过自定义指令符来满足定制化功能。

  • #define 自定义指令符
  • #undef 删除指令符

也可以通过属性的方式来执行方法

使用Visual Studio快速定义指令符

VS站点-》右键-》属性-》生成-》常规

定义生效后,通过csproj工程文件我们可以看到有两条PropertyGroup对应不同的Condition

定义指令符区域

你还可以使用以下两个预处理程序指令定义可以折叠在大纲中的代码区域:

  • #region:开始一个区域。
  • #endregion:结束区域
#region MyClass definition
public class MyClass
{
  static void Main()
  {
  }
}
#endregion

参考链接

https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/preprocessor-directives

https://blog.walterlv.com/post/how-to-define-preprocessor-symbols.html

https://www.cnblogs.com/woxihuadabai/p/8005892.html

到此这篇关于.net 预处理指令符的使用的文章就介绍到这了,更多相关.net 预处理指令符内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • .NET框架中间语言IL指令大全

    IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermediate Language)的代码. 名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且将结果推送

  • asp.net服务器端指令include的使用及优势介绍

    asp.net中的服务端包括指令简单点就是一个<!-- #include file|virtual="filename" –>这样的指令,msdn中的名词解释是:将指定文件的内容插入 ASP.NET 文件中,包括网页(.aspx 文件).用户控件文件(.ascx 文件)和 Global.asax 文件.插入静态文件这个基本功能就不说了,插入aspx.ascx,这功能算是挺强了,asax哥就有点困惑了,这个暂且不管,今天要说的就是这个指令. 尴尬的存在     服务器端包括指

  • .net 预处理指令符的使用详解

    什么是预处理指令符? 当C#编译器找到一条预处理指令#if,最后找到一条指令时,#endif仅在定义了指定符号的情况下,编译器才会在这些指令之间编译代码.与C和C ++不同,您不能将数字值分配给符号.#if C#中的语句为布尔型,仅测试符号是否已定义. 预处理指令符的使用 #if:打开条件编译,仅在定义了指定符号的情况下才编译代码. #elif:根据是否定义了指定的符号,关闭前面的条件编译并打开新的条件编译. #else:如果未定义先前指定的符号,则关闭之前的条件编译并打开新的条件编译. #en

  • 浅谈AngularJs指令之scope属性详解

    AngularJS使用directive()方法类定义一个指令: .directive("name",function(){ return{ }; }) 上面是定义一个指令的主体框架,该方法接受两个参数: 1.第一个参数:name表示定义的指令的名称(angularjs会用这个name注册这个指令) 2.第二个参数:函数,该番薯必须返回一个对象或者一个函数,但通常我们会返回一个对象.return后接的就是返回的对象. 在返回的对象中有一个scope属性,这个属性用来修饰指令的作用域.

  • Linux内存描述符mm_struct实例详解

    Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起.(所依据的代码是2.6.32.60) 无论是内核线程还是用户进程,对于内核来说,无非都是task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process descriptor),因为它记录了这个进程所有的context.其中有一个被称为'内存描述符'(memory descriptor)的数据结构mm_struct,抽象并描述了Linux视角下管理进程地址空间的所有信息

  • C#中const 和 readonly 修饰符的用法详解

    1. 只有C#内置类型(int,double,long等)可以声明为const;结果.类和数组不能声明为const. 2. readonly 是在字段上使用的修饰符,直接以类名.字段访问. 3. const 必须在申明中初始化.之后不能再修改. 4. readonly可以在申明中初始化,也可以在构造函数中初始化,其它情况不能修改. namespace const_and_readonly { class Program { static void Main(string[] args) { Co

  • 对angularJs中自定义指令replace的属性详解

    如下所示: <div ng-app="module"> <div my-exam></div> </div> <script> var m = angular.module('module', []); m.directive('myExam', [function () { return { restrict: 'EA', template: '<h1>欢迎浏览泠泠在路上</h1>', /*1.rep

  • Vue3父子组件传参有关sync修饰符的用法详解

    目录 单向数据流讲解 Vue2.x使用 定义事件的形式, 通知父组件修改 .sync 和 update: 的使用 父传子, 传递多个数据的简写 采用v-model简写(要求严格) Vue3.x使用 普通用法 简写 单向数据流讲解 单向数据流(堆可以修改,栈不可修改) 我们都知道, 父传子的数据, 是单向数据流,即子组件不能直接修改, 父组件传递过来的值 但实际上, 对于修改值, 真正是:基本数据类型不可修改,复杂数据类型不要修改引用地址(栈),它的值可以随便修改 Vue2.x使用 定义事件的形式

  • LyScript寻找ROP漏洞指令片段的方法详解

    ROP绕过片段简单科普一下,你可以理解成一个可以关闭系统自身内存保护的一段机器指令,这段代码需要我们自己构造,这就涉及到在对端内存搜寻这样的指令,LyScript插件增强了指令片段的查找功能,但需要我们在LyScript插件基础上封装一些方法,实现起来也不难. LScript项目地址:https://github.com/lyshark/LyScript 封装机器码获取功能: 首先封装一个方法,当用户传入指定汇编指令的时候,自动的将其转换成对应的机器码,这是为搜索ROP片段做铺垫的,代码很简单,

  • Vue常用的修饰符的作用详解

    目录 一.Vue的修饰符是什么 二.修饰符的作用 1.表单修饰符 2.事件修饰符 3.鼠标按钮修饰符 4.键盘修饰符 5.v-bind修饰符 三.常用的应用场景 一.Vue的修饰符是什么 Vue中的修饰符分为以下五种: 表单修饰符: 事件修饰符: 鼠标按键修饰符: 键值修饰符: v-bind修饰符. 二.修饰符的作用 1.表单修饰符 修饰符 作用 使用 lazy 填完信息,光标离开标签的时候,才会将值赋予给value <input type="text" v-model.lazy

  • vue中v-model指令与.sync修饰符的区别详解

    目录 v-model .sync 细微之处的区别 总结功能作用场景: v-model <!--父组件--> <template> <!--v-model 指令是语法糖--> <Child v-model="model"></Child> <!-- 把 v-model 指令展开后相当于下面的代码 --> <!-- v-model绑定的默认事件是input,默认prop是value属性 --> <Ch

  • Angular.JS中指令的命名规则详解

    命名规范 同一个AngularJS指令,在js文件和html文件中有着不同的命名规范:在js文件中使用标准的小驼峰命名法,在html文件中使用"小写字母+连接符"的命名法.如下表所示 在js文件中 在html文件中 ngApp ng-app myDirective my-directive 处理机制 AngularJS之所以选择这样的命名方式,是因为html文件不区分大小写,而js文件则对大小写敏感(myDir和mydir在js文件中是不同的指令,但html看来是同一个指令),为了避免

随机推荐