C#编程
文章平均质量分 60
C# 编程语法基础
斯文小提莫
品味当下,观自在
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【IL】IL语言ldfld和ldflda的异同
本文解析了IL指令ldfld和ldflda的异同。二者都用于访问实例字段,需要栈顶为对象引用,并指定字段元数据。核心区别在于:ldfld加载字段值到栈顶(如int32),而ldflda加载字段地址(如int32&)。前者用于普通读取,后者用于ref/out参数或指针操作。静态字段需使用ldsfld/ldsflda。通过C#代码与IL对照示例,直观展示了二者的使用场景差异。简言之,ldfld取值,ldflda取址,均仅适用于实例字段访问。原创 2026-01-05 10:36:21 · 418 阅读 · 0 评论 -
【C#】离线场景检测系统时间回拨
本文提出了一种基于.NET Framework 4.5/C# 5.0的离线场景检测系统时间回拨方案。该方案通过本地持久化记录合法时间基准和哈希校验值来防止时间篡改,主要功能包括:首次运行时记录当前系统时间作为基准并生成防篡改哈希;后续运行时验证基准时间合法性,若检测到当前时间显著早于基准时间(偏差超过1分钟)则判定为时间回拨篡改。系统采用注册表存储基准数据,包含时间戳和哈希值,并通过盐值拆分提升安全性。代码实现包含完整的异常处理和权限管理,适用于软件许可证控制等需要防范时间篡改的离线场景。原创 2025-12-04 17:31:21 · 359 阅读 · 0 评论 -
【C#】 RSA 密钥生成工具
本文介绍了如何在.NET 4.5环境下生成RSA密钥对,用于软件许可证验证。提供了完整的C#控制台程序代码,可生成2048位的RSA公私钥对,并自动保存为XML文件。文章强调了私钥必须严格保密,建议生产环境自行生成密钥对而非使用示例密钥。同时给出了公钥安全嵌入的建议方案,包括字符串分段存储和运行时拼接,以防止硬编码提取。最后说明了如何验证公钥有效性,确保生成的密钥可直接用于时间管控代码。原创 2025-12-03 22:16:26 · 678 阅读 · 0 评论 -
【C#】VS调试——带参调试
摘要:C#调试带参数程序的核心在于正确配置参数传递方式。控制台程序可通过Visual Studio项目属性或VS Code的launch.json设置命令行参数,也可临时硬编码测试。调试自定义方法时,可通过直接调用、即时窗口或单元测试传入参数,配合断点检查参数值。关键技巧包括查看/修改参数值、设置条件断点等。典型调试流程:配置参数→设置断点→启动调试→检查变量→逐步执行。不同开发工具的参数配置方式略有差异,但核心调试逻辑相同。原创 2025-12-03 22:07:06 · 1038 阅读 · 0 评论 -
【逆向】IL语言缩写——运算、控制、调用、定义
本文系统梳理了C#中间语言(IL)核心指令的命名逻辑。算术指令如add/sub/mul源自英文运算术语;控制流指令以branch(call/virt)等动词为基础;对象操作指令如box/unbox直接体现功能特征;方法元数据标记则直接采用private/static等术语。整体而言,IL指令命名遵循"操作语义+目标类型"原则,通过英文单词缩写或直接使用术语,实现简洁性和语义明确性,便于开发者快速理解指令功能。原创 2025-11-16 11:39:00 · 675 阅读 · 0 评论 -
【逆向】IL语言缩写——堆栈操作
摘要:C#的IL指令命名遵循"操作+目标类型"的缩写逻辑:ld表示加载(load),st表示存储(store)。常见指令包括ldc(加载常数)、ldarg(加载参数)、ldloc(加载局部变量)、ldfld(加载字段)和stfld(存储字段)等。后缀补充类型信息,如i4表示4字节整数。这种缩写既简化指令长度,又保持语义清晰,便于理解操作对象和目的。原创 2025-11-16 11:37:27 · 272 阅读 · 0 评论 -
IL语言——跳转
摘要 本文详细解析了IL中call、callvirt和jmp三种方法调用指令的区别。call用于静态方法或非虚实例方法,不触发多态;callvirt用于虚实例方法,支持多态,会检查对象类型;jmp实现无条件跳转,不创建调用栈。通过C#代码示例和对应IL指令,展示了各指令的具体应用场景和执行逻辑差异。理解这些差异有助于深入掌握.NET方法调用的底层机制。原创 2025-10-14 13:04:19 · 488 阅读 · 0 评论 -
IL语言——循环
本文通过具体示例对比了while、do-while和for循环在IL语言中的实现方式。三种循环均使用ldloc/stloc操作变量,bgt/ble等指令控制流程,但执行顺序不同:while和for先判断条件再执行循环体,do-while先执行循环体再判断。while适用于可能不执行循环体的场景,do-while适用于至少执行一次的场景,for适用于已知迭代范围的场景。全文通过详细注释的IL代码,展示了不同循环结构在底层实现上的共性与差异。原创 2025-10-14 11:59:53 · 500 阅读 · 0 评论 -
IL语言常用语法
摘要:.NET中间语言(IL)是底层基于堆栈的指令集,其语法围绕方法元数据标记和操作指令展开。方法定义通过元数据标记控制访问性(public/private等)和行为(static/virtual等)。核心指令包括:1)堆栈操作(ldc加载常数、ldarg加载参数);2)数值逻辑运算(add/sub等);3)控制流(br跳转、ret返回);4)方法调用(call/callvirt)和对象操作(newobj创建实例)。IL采用"弹出-执行-压入"的堆栈模型,需保持栈平衡。特殊标记如pinv原创 2025-09-24 09:49:21 · 303 阅读 · 0 评论 -
c#编写的应用程序调用不在同一文件夹下的DLL
在C#中调用外部DLL的方法包括:1)托管DLL可通过修改配置文件指定搜索路径或动态加载;2)非托管DLL需设置PATH变量、修改工作目录或硬编码路径;3)混合依赖需确保路径正确。建议合理组织目录结构,注意版本匹配和安全性。推荐根据场景选择配置文件、动态加载或环境变量等方法,兼顾整洁性和稳定性。(149字)原创 2025-09-03 20:19:12 · 1108 阅读 · 0 评论 -
加密-advapi32.dll中CryptEncrypt函数的介绍
本文详细介绍了Windows加密API中的CryptEncrypt函数,该函数位于advapi32.dll中,用于数据加密(支持对称/非对称算法)。文章解析了函数原型和关键参数(如密钥句柄、哈希选项、缓冲区管理等),强调分组加密的注意事项和常见错误代码。最后给出了C#调用示例和安全实践建议,包括密钥管理、线程安全和缓冲区预留等要点。(150字)原创 2025-08-26 10:41:37 · 358 阅读 · 0 评论 -
windows服务,生命周期各函数的调用顺序
本文介绍了Windows服务开发中ServiceBase类的生命周期方法及其调用顺序。主要包括构造函数初始化服务配置,OnStart启动主逻辑(需30秒内完成),OnStop清理资源,以及可选的OnPause、OnContinue、OnShutdown和OnCustomCommand方法。关键注意事项包括超时限制、异步处理、状态一致性和异常捕获。典型示例展示了定时器服务的实现方式,核心调用顺序为:构造函数→OnStart→[可选暂停/继续]→OnStop/OnShutdown。开发者必须实现OnStart和原创 2025-08-25 17:24:19 · 647 阅读 · 0 评论 -
NLog、log4net、Serilog 和 Microsoft.Extensions.Logging 四大 .NET 日志库的综合对比
以下是针对 NLog、log4net、Serilog 和 Microsoft.Extensions.Logging 四大 .NET 日志库的综合对比,从输出效率、易用性等角度展开原创 2025-06-28 14:57:40 · 1045 阅读 · 0 评论 -
C# 中对 Task 中的异常进行捕获
C# 中捕获 Task 异常的方法:一是 try-catch 与 await,简洁直观;二是 ContinueWith 检查 task.IsFaulted 及 task.Exception.InnerExceptions;三是 Task.WhenAll 或 Task.WhenAny 时 try-catch;四是 TaskScheduler.UnobservedTaskException,但不推荐。推荐 try-catch 与 await 组合,更安全。原创 2025-01-14 09:13:01 · 1057 阅读 · 0 评论 -
【基础】c# FileStream 对象不会自动释放
FileStream对象不会自动释放资源。为避免资源泄露,应使用using语句或显式调用Dispose方法来释放文件流资源。原创 2024-12-06 17:43:54 · 810 阅读 · 0 评论 -
c# 子类继承父类接口问题
在C#中,子类并不直接“继承”父类继承的接口,但子类的确会继承父类对接口的实现(如果父类实现了该接口)原创 2024-09-25 15:47:21 · 964 阅读 · 0 评论 -
避坑——Matlab c# 联合编程——Native
主要是MWStructArray,MWArray等数据交换对象有两套,你不指定,就有可能用串,后果就是无法转换和报错,怎么查都不对,as,强转都无用。相同的库,Matlab生成供.net调用的库时会有两套,也就是Native(本地),两套库各有优缺点,这这里就不说了,可以翻看网上其他博文。原创 2024-03-04 16:09:35 · 385 阅读 · 0 评论 -
ScottPlot图标控件的使用
ScottPlot是一个免费的开源交互式绘图库,适用于 .NET。它具有适用于 Windows 窗体、WPF、Avalonia 和 Eto 窗体的用户控件,它甚至可以在服务器环境或控制台应用程序中将绘图生成为图像文件。ScottPlot 面向 .NET Standard 2.0,因此它可以在 .NET Framework 和 .NET Core 应用程序中使用。ScottPlot 的 API 模仿Python 的Matplotlib,大多数绘图都可以用一行代码创建原创 2023-08-30 11:20:24 · 1650 阅读 · 0 评论 -
c# 并行计算(大量循环处理的场景下)
并行指有多个CPU资源同时处理多个线程,不存在竞争的概念,可以大量节省运行时间。原创 2023-05-18 23:45:00 · 775 阅读 · 0 评论 -
WPF 判断窗体是否关闭
PresentationSource.FromVisual函数判断源是否为空。原创 2023-03-01 09:50:40 · 1352 阅读 · 0 评论 -
Windous注册表+c#操作
将会分享Windous注册表的基础知识及C# 读写注册表的方法。原创 2023-01-15 01:00:00 · 1212 阅读 · 0 评论 -
Modbus 串口 C#
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信,举个例子,一个测量温度和湿度的装置,并且将结果发送给计算机。原创 2023-01-05 23:45:00 · 2116 阅读 · 4 评论 -
vs 生成前事件 生成后事件命令
为了提高编译生成后的事件效率,不需要手动的拷贝到固定目录。可以在项目->属性中设备生成后事件。输入相应的命令行,即可。原创 2023-01-03 23:00:00 · 2876 阅读 · 0 评论 -
Windous服务开发教程,实战1h学会
Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序。 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显示任何用户界面。原创 2022-12-25 12:30:05 · 1561 阅读 · 0 评论 -
不是为了写注释而写注释
注释是指解释字句的文字,也指用文字解释字句。可以是文字符号图片等多种形式。尤其是国内,这种现象不仅是在小公司小团队中司空见惯,就算在大公司,以及大团队中的开源项目里,也是屡见不鲜。原创 2022-12-16 23:45:00 · 129 阅读 · 0 评论 -
C# 调用 Matlab dll
C# 对Matlab dll的调用原创 2022-11-08 19:14:58 · 322 阅读 · 0 评论 -
c# 数据压缩与解压
【代码】c# 数据压缩与解压。原创 2022-11-03 11:33:42 · 430 阅读 · 0 评论 -
C# 可空类型
可空类型在日常的项目中还是会经常使用到,针对每个逻辑层的方法对于传入参数和返回参数而言,都可能存在使用可空类型来进行处理和转化。原创 2022-07-19 22:45:00 · 431 阅读 · 0 评论 -
C# 多线程
c# 线程、线程池、任务 用法 差别对比原创 2022-07-19 09:21:47 · 352 阅读 · 0 评论 -
WPF Chart图标的使用
大数据的展示,Chart图表的方式一目了然。目标:可显示实现列表对象数据,可切换不同列表显示后台数据对象构建对象绑定效果展示不同形式觉得有用就请关注赞收藏吧!!!工控之路,不迷茫......原创 2022-06-16 06:30:00 · 786 阅读 · 0 评论 -
.NET Framework和.NET Core/.NET5/.NET6
升级高版本VS后,VS对.NET Core的支持更加好了,如下图使用的vs版本同一套东西2种版本。用.NET Framework新建项目如下图用.NET6新建项目如下图.NET Framework 的公共语言运行时(Common Language Runtime 简称CLR),.NETCore 重新设计了 CoreCLR,以及一个被称为 CoreFX 的基础类库( Base Class Library 简称BCL)。现在 .NET 框架的命名混乱到令人发指。所以他们决定合并.NET Core原创 2022-06-15 23:45:00 · 4119 阅读 · 0 评论 -
c# ListView加载大量数据优化 传统方法&虚拟模式
背景:项目上需要展示5w条测试结果数据,传统方法private void btnLoadAllDate_Click(object sender, EventArgs e) { DateTime startTime = DateTime.Now; lvAllData.Items.Clear(); int index = 0; foreach (var item in Global.Recipe原创 2022-05-29 17:23:06 · 3136 阅读 · 0 评论 -
c# 可空类型的妙用
c#基础语法可空值原创 2022-04-29 11:14:46 · 290 阅读 · 0 评论 -
WPF MVVM基础
WPF MVVM基础原创 2021-06-30 13:12:05 · 201 阅读 · 0 评论 -
c# 键盘钩子
using System;using System.Collections.Generic;using System.Diagnostics;using System.Runtime.InteropServices;using System.Text;namespace KeyboardHookPro{ public class ScanerHook { public delegate void ScanerDelegate(ScanerCodes codes)原创 2021-06-24 16:47:40 · 1896 阅读 · 0 评论 -
工业级轻量日志处理log
做设备上位机4年,大多数时候使用的都是NLog、Log4Net这些开源框架直接写,在无数的项目的跌倒而又再次跌倒,为啥这么说,日志打印稍微卡一下无关紧要,这是每次跌倒后说服自己的。文章目录一、解决思路二、C#实现1.消费者(核心代码)2.生产者总结一、解决思路采用生产消费模式,利用线程安全的队列进行缓冲(比Lock锁快)。二、C#实现1.消费者(核心代码)每秒1000次检验队列是否有产品,确保数据丢失小于1ms /// <summary> ///原创 2020-10-26 21:28:07 · 331 阅读 · 0 评论 -
C# 反射 Assembly再次学习
Assembly回炉再造文章目录Assembly回炉再造前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言从接触c#到现在已经是第三个年头了,OOP(面向对象编程)编程的基本方法算是已经可以使用,但在工作中发现,只是单纯的OOP,还是有很多的问题,程序还是不够精妙,至此发现,Assembly的回炉有必要进行一下了。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建原创 2020-10-23 19:57:39 · 199 阅读 · 0 评论 -
时隔一年重新学习Attribute
自定义Attribute定义/******************************************************* 命名空间: AtrributDemo** 文 件 名:DeviceAttribute** 内容简述:** 版 本:V1.0** 创 建 人:Byron** 创建日期:2020/10/21 15:51:43** 修改记录:日期 版本 修改人 修改内容 *****************************原创 2020-10-21 20:21:24 · 153 阅读 · 0 评论 -
C#中重写(override)和覆盖(new)的区别,简单区分
写了很久的c# ,但对一些细枝末节也没有深纠,override和New就是#region 重写public class C1{ public virtual string GetName() { return "byronLoong"; }}public class C2 : C1{ public override string GetName() { return "龙龙"; }原创 2020-05-11 09:38:14 · 304 阅读 · 0 评论 -
SDK编写经验总结一
顶层接口只开放对用户意义函数函数尽量少,能一个函数完成绝对不两个函数函数名简单易懂次顶层接口接口隔离函数功能隔离可组合形式多原创 2020-04-30 17:32:28 · 930 阅读 · 0 评论
分享