当前位置: 首页 > news >正文

C# 条件编译

C# 条件编译

C# 条件编译:根据不同的需求,编译生成不同的程序版本,条件编译是一种编译预处理命令,它是在编译代码之前对源代码进行处理。它可以根据条件,决定是否编译某段代码
条件编译的三种形式:
第一种形式:

#if 条件....
#endif

举个例子:

#if DEBUGDebug.Print("软件测试中");Console.WriteLine("软件测试中");
#endifConsole.WriteLine("Excel梦想家软件代码");Console.ReadKey();

如果你在debug模式下:会打印出“软件测试中”和“Excel梦想家软件代码”,但是如果你在release模式下:只会打印出“Excel梦想家软件代码”
第二种形式:

#if 条件......
#else......
#endif......

例程如下:

#define TRIAL
//#undef TRIAL
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace demo_0809
{internal class Program{static void Main(string[] args){//第二个例子,自定义符号
#if TRIALDateTime endDate = new DateTime(2023, 8, 4);int days = (endDate - DateTime.Now).Days;if (days > 0){Console.WriteLine("您还有{0}天的试用期", days);}else{Console.WriteLine("您的试用期已过,请购买正式版权");Console.ReadKey();return;}
#elseConsole.WriteLine("正式版用户,欢迎使用系统!");
#endifConsole.WriteLine("Excel梦想家软件开始工作");Console.ReadKey();}}
}

自定义符号注意点如下:
#define 符号名字,符号名通常使用英文大写,必须定义在所有using命名空间前面;符号可以被整个项目中的所有文件使用;#undef 符号名字,可以取消已经定义的符号。
如上面的代码所示:##undef TRIAL这句代码被注释掉了,代码只会执行“使用版本”的代码和“endif”后面的代码,如果没有注释掉#undef TRIAL这句代码,会打印出:
“正式版用户,欢迎使用系统!
Excel梦想家软件开始工作

第三种形式:

#if 条件1......
#elif 条件2......
#else......
#endif......

例程如下:

#define FREE_VERSION
#define PRO_VERSION
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace demo1_0809
{internal class Program{static void Main(string[] args){
#if (FREE_VERSION)Console.WriteLine("你使用的是免费版");
#elif (PRO_VERSION)Console.WriteLine("你使用的是专业版");
#elseConsole.WriteLine("你使用的版本未知");
#endifConsole.ReadKey();}}
}

上面写了两个define,会打印出“你使用的是免费版”,如果注释掉“#define FREE_VERSION”,会打印出“你使用的是专业版”,如果两个都注释掉,会打印出“你使用的版本未知”。
补充:特性

#define 高级版
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace demo2_0809
{internal class Program{static void Main(string[] args){play();Console.WriteLine("hello world");Console.ReadKey();}[Conditional("高级版")]static void play(){Console.WriteLine("高级玩法");}}
}

上述例子:会调用play()方法,如果不加“#define 高级版”,那么不会调用play()方法。

相关文章:

C# 条件编译

C# 条件编译 C# 条件编译:根据不同的需求,编译生成不同的程序版本,条件编译是一种编译预处理命令,它是在编译代码之前对源代码进行处理。它可以根据条件,决定是否编译某段代码 条件编译的三种形式: 第一种…...

IntelliJ IDEA如何重新弹出git身份验证窗口

1、点击File菜单—>点击Settings—>点击Appearance & Behavior—>点击System Settings—>点击Passwords—>选中Do not save, forget passwords after restart—>点击Apply—>点击OK,如下所示: 2、重启IntelliJ IDEA—>通过g…...

【雕爷学编程】Arduino动手做(200)---WS2812B幻彩LED灯带4

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...

【雕爷学编程】Arduino动手做(201)---DFRobot 行空板03

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…...

Spring中Bean的“一生”(生命周期)

文章目录 一、图解二、文字解析总结 一、图解 >注:处于同一行的执行顺序是从左往右 二、文字解析 SpringBean的生命周期总体分为四个阶段:实例化>属性注入>初始化>销毁 Step1 实例化Bean:根据配置文件中Bean的定义,…...

安卓:LitePal操作数据库

目录 一、LitePal介绍 常用方法: 1、插入数据: 2、更新数据: 3、删除数据: 4、查询数据: 二、LitePal的基本用法: 1、集成LitePal: 2、创建LitePal配置文件: 3、创建模型类…...

【JavaEE初阶】了解JVM

文章目录 一. JVM内存区域划分二. JVM类加载机制2.1 类加载整体流程2.2 类加载的时机2.3 双亲委派模型(经典) 三. JVM垃圾回收机制(GC)3.1 GC实际工作过程3.1.1 找到垃圾/判定垃圾1. 引用计数(不是java的做法,Python/PHP)2. 可达性分析(Java的做法) 3.1.2 清理垃圾1. 标记清除2…...

基于vue2.0和elementUi的vue农历日期组件vue-jlunar-datepicker(插件)

vue-jlunar-datepicker(插件) vue实现农历日历插件——vue-jlunar-datepicker插件 这个插件本身是基于vue2.0和elementUi框架来实现的。 安装 vue-jlunar-datepicker 插件 npm install vue-jlunar-datepicker --save // 如果安装过程中,出现…...

Python爬虫——selenium_元素定位

元素定位:自动化要做的就是模拟鼠标和键盘来操作这些元素,点击,输入等等。操作这些元素前首先要找到它们,WebDriver提供很多定位元素的方法 from selenium import webdriver# 创建浏览器对象 path files/chromedriver.exe brows…...

短视频内容平台(如TikTok、Instagram Reel、YouTube Shorts)的系统设计

现在,短视频内容已成为新趋势,每个人都在从TikTok、Instagram、YouTube等平台上消费这些内容。让我们看看如何为TikTok创建一个系统。 这样的应用程序看起来很小,但在后台有很多事情正在进行。以下是相关的挑战: •由于该应用程序…...

【git】Git 回退到指定版本:

文章目录 方法一: 使用 git reset 命令方法二:使用 git revert 命令方法三:使用 git checkout 命令常见的错误及其解决办法如下: 方法一: 使用 git reset 命令 命令可以将当前分支的 HEAD 指针指向指定的提交,从而回退代码到指定版…...

kibana+nginx配置密码 ubuntu

JAVA进阶之路-nginx设置密码 Kibana——通过Nginx代理Kibana并实现登陆认证 需要配置一下nginx文件 nginx配置文件详解 密码生成安装软件 apt install apache2-utils...

Git仓关联多个远程仓路径

前言 Git仓如果需要将代码push到多个仓,常用的做法是添加多个远程仓路径,然后分别push。这样虽然可以实现目的,但是需要多次执行push指令,很麻烦。 本文介绍关联多个远程仓路径且执行一次push指令的方法:git remote …...

使用ffmpeg将m4a及wav等文件转换为MP3格式

要使用ffmpeg将m4a及wav等文件转换为MP3格式,您可以按照以下步骤进行操作: 安装 ffmpeg 确保您已经安装了ffmpeg软件。如果没有安装,请访问ffmpeg的官方网站https://ffmpeg.org/ 并按照说明进行安装。 Win10 / Win11 可以通过 winget 命令…...

【CI/CD】Git Flow 分支模型

Git Flow 分支模型 1.前言 Git Flow 模型(本文所阐述的分支模型)构思于 2010 年,也就是 Git 诞生后不久,距今已有 10 多年。在这 10 多年中,Git Flow 在许多软件团队中大受欢迎。 在这 10 多年里,Git 本身…...

SpringBoot Thymeleaf模板引擎

Thymeleaf 模板引擎 前端交给我们的页面,是html页面。如果是我们以前开发,我们需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据的显示,及交互等。 jsp支持非常强大…...

prometheus部署

一、前言 Prometheus 是一个开源的系统监控和警报工具,用于收集、存储和查询时间序列数据。它旨在提供高效的多维数据收集和查询功能,帮助用户监控其应用程序和基础设施的性能,并在出现问题时触发警报,总来得说prometheus是用来收…...

Flink-Window详细讲解-countWindow

一.countWindow和countWindowall区别 1.countWindow: 如果您使用 countWindow(5),这意味着您将数据流划分成多个大小为 5 的窗口。划分后的窗口如下: 窗口 1: [1, 2, 3, 4, 5]窗口 2: [6, 7, 8, 9, 10] 当每个窗口中的元素数量达到 5 时&…...

React 18 state 如同一张快照

参考文章 state 如同一张快照 也许 state 变量看起来和一般的可读写的 JavaScript 变量类似。但 state 在其表现出的特性上更像是一张快照。设置它不会更改已有的 state 变量,但会触发重新渲染。 设置 state 会触发渲染 可能会认为用户界面会直接对点击之类的用…...

EasyPoi导出 导入(带校验)简单示例 EasyExcel

官方文档 : http://doc.wupaas.com/docs/easypoi pom的引入: <!-- easyPoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version></dep…...

【2026奇点技术白皮书首发】:全球仅23家通过AI原生研发成熟度三级认证企业的共性实践

第一章&#xff1a;AI原生软件研发&#xff1a;2026奇点智能技术大会核心议题 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发已超越传统“AI赋能”范式&#xff0c;进入以大模型为运行时、以提示与推理链为基本构件、以LLM-as-OS为架构基底的新纪元。2026奇点智…...

如何快速掌握Node.js最佳实践:2024终极指南

如何快速掌握Node.js最佳实践&#xff1a;2024终极指南 【免费下载链接】nodebestpractices :white_check_mark: The Node.js best practices list (July 2024) 项目地址: https://gitcode.com/GitHub_Trending/no/nodebestpractices Node.js最佳实践项目是Node.js开发者…...

从传统WinForm到现代化桌面应用:SunnyUI如何重塑C开发体验

从传统WinForm到现代化桌面应用&#xff1a;SunnyUI如何重塑C#开发体验 【免费下载链接】SunnyUI SunnyUI.NET 是基于.NET Framework 4.0、.NET6、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。 项目地址: https://gitcode.com/gh_m…...

B站m4s转换工具:3分钟解锁缓存视频的终极解决方案

B站m4s转换工具&#xff1a;3分钟解锁缓存视频的终极解决方案 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾遇到过这样的困扰&#xf…...

从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程

引言在算法竞赛的世界里&#xff0c;每一道题都像是一个等待解开的谜题。今天&#xff0c;我将与大家分享一道关于任务调度问题的完整解题心路历程。这个故事不仅记录了我从暴力搜索到最优算法的探索过程&#xff0c;更展现了在面对复杂问题时&#xff0c;如何通过逐步优化、深…...

吃灰安卓机变身 OpenClaw 服务器 — 完整手册乙

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时&#xff0c;输出结果中包含大量由集群自动生成的元数据&#xff08;如 managedFields、resourceVersion、uid 等&#xff09;。这些信息在实际复用 yaml 清单时需要手动清理&#xff0c;增加了额外的工作量。 使用 kube…...

调试排错 - 线程Dump分析锌

1、普通的insert into 如果&#xff08;主键/唯一建&#xff09;存在&#xff0c;则会报错 新需求&#xff1a;就算冲突也不报错&#xff0c;用其他处理逻辑 回到顶部 2、基本语法&#xff08;INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)&#xff09; 语…...

深入Verilog-axi源码:手把手教你读懂开源AXI4-Lite Crossbar的仲裁与路由逻辑

深入Verilog-axi源码&#xff1a;手把手教你读懂开源AXI4-Lite Crossbar的仲裁与路由逻辑 在数字IC设计领域&#xff0c;AXI总线协议已成为SoC内部模块通信的黄金标准。而作为AXI协议的精简版本&#xff0c;AXI4-Lite凭借其轻量级特性&#xff0c;在寄存器配置、低速外设控制等…...

(学习笔记)3.11 浮点代码(3.11.4 定义和使用浮点数3.11.5 在浮点代码使用位级操作)

文章目录线索栏笔记栏1.定义和使用浮点常数1&#xff09;核心机制2&#xff09;示例分析3&#xff09;练习题3.552.在浮点代码中使用位级操作1&#xff09;指令与功能2&#xff09;标量应用3&#xff09;练习题3.56&#xff08;逆向工程位操作&#xff09;总结栏线索栏 为什么…...

Legacy-iOS-Kit:终极iOS降级与越狱完整指南

Legacy-iOS-Kit&#xff1a;终极iOS降级与越狱完整指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你是否有一…...