自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(126)
  • 收藏
  • 关注

原创 C#程序集引用库绑定重定向

参数值含义oldVersion需要被替换的版本范围:- 格式为起始版本-结束版本,支持 4 段式版本号(主版本。次版本。生成号。修订号);- 这里表示 “从最低版本(0.0.0.0)到 13.0.0.0 的所有版本” 都要被重定向;- 若需指定多个不连续范围,可用逗号分隔(如newVersion10.0.0.0统一替换为的目标版本:- 程序运行时,所有匹配oldVersion范围的请求,都会被强制加载这个版本的 Newtonsoft.Json;

2026-01-22 10:56:40 250

原创 C#调用非托管 DLL(原生 C/C++ 编译的 DLL) 加载地址方式选择

适用场景:手动管理 DLL 生命周期(LoadLibraryEx+FreeLibrary):不同 DLL 在不同子目录(LoadLibraryEx):所有 C++ DLL 集中在一个子目录(如。

2026-01-09 14:24:38 160

原创 C# 多返回值写法

特性,从 C# 7.0 开始引入,专门用来解决 “需要返回多个独立值” 的场景,完全符合 C# 的语法规范。方案 3:旧版 Tuple(.NET 4.0+)方案 1:out 参数(最简洁)方案 2:结构体(语义最清晰)不是 “奇怪的写法”,而是。这是 C# 里非常实用的。方案 4:数组(最简陋)

2026-01-05 17:27:15 383

原创 C# Tiff转换Bitmap处理方法

首先项目中引入BitMiracle.LibTiff.NET的dll。

2026-01-05 11:16:31 281

原创 C# 嵌入资源加载 + 外部配置文件的兜底配置

嵌入资源无法在程序发布后随意修改(它被打包到程序集内部,而非独立文件),这看似是 “缺点”,但也正是它的核心价值所在。嵌入资源有其明确的适用场景,主要用于存放无需动态修改、需要随程序集一起分发、希望被保护或避免丢失的文件。

2026-01-04 16:54:19 446

原创 C# 调用托管 DLL(C#编译的 DLL) 加载地址方式选择

当.NET 运行时默认无法找到依赖的程序集(DLL)时,通过自定义逻辑指定 DLL 的查找路径并完成加载,避免程序因 “找不到程序集” 而抛出异常崩溃。节点是.NET 提供的配置级程序集查找方案,它的作用是扩展.NET 运行时的默认程序集搜索路径—— 在默认搜索失败前,.NET 会自动去。是.NET 中用于处理程序集加载失败的核心事件,是实现自定义程序集(DLL)加载逻辑的关键入口。3.在项目的debug文件夹中,建立代码中的名字dll文件夹,把所有的dll扔进去即可。目录中查找依赖 DLL。

2026-01-04 16:15:52 590

原创 C# IEnumerable、IEnumerator接口与yield return关键字的相关知识

MyInt2类未实现任何可遍历接口,而是通过返回IEnumerable<int>类型的迭代器方法,间接支持foreach遍历,核心依赖yield return关键字的惰性执行特性。,是实际执行遍历操作的 “工具”,负责一步步获取集合中的元素,利用MoveNext(),Current维护遍历状态。是 “取水果的夹子”(执行遍历),你不能直接遍历 “夹子”,只能遍历 “水果篮”。「标记接口」,表示 “这个对象可以被遍历”,核心方法。「功能接口」,表示 “这个对象是遍历工具”,核心方法。(可遍历对象)」和「

2025-12-30 17:07:53 314

原创 C# GetType的常规用法汇总

GetType()是 C# 中继承自Object的核心方法(返回实例的对象),看似简单,却能在。

2025-12-18 09:06:13 220

原创 C# 如何锁定 .NET SDK 版本

添加手动创建文件并编写配置,或用命令生成;核心配置是(指定 SDK 版本)和(版本兼容策略);通过可验证配置是否生效。这样你就能根据项目需求灵活配置.NET SDK版本了!

2025-11-27 10:49:48 337

原创 常见 MVVM 框架的核心功能与特性对比

做封装,实现 “界面 - 视图模型” 的绑定与状态同步,差异主要体现在具体 API 写法和扩展功能支持上。所有 MVVM 框架的基础逻辑一致:均围绕ICommand。

2025-11-25 09:19:19 210

原创 Prism框架INavigationAware 和 IConfirmNavigationRequest 的用途与差异

是 “被动” 处理导航,只做数据加载 / 清理,无法干预导航是否发生;是 “主动” 控制导航,通过确认逻辑决定是否允许离开当前页面,是对的功能扩展。简单说:需要 “问用户能不能走” 用后者,不需要则用前者。

2025-11-24 15:44:32 187

原创 Halcon基于形状模板匹配

【代码】Halcon基于形状模板匹配。

2025-09-08 15:58:18 292

原创 装饰器模式-登录功能的扩展

(3) 可以对一个对象进行多次装饰,通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合,得到功能更为强大的对象。(4) 具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类,原有类库代码无须改变,符合 “开闭原则”。(2) 可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为。(1) 对于扩展一个对象的功能,装饰模式比继承更加灵活性,不会导致类的个数急剧增加。

2025-09-05 16:48:10 272

原创 观察者模式-红绿灯案例

观察者模式在C#中的应用,通过一个红绿灯和汽车的例子,解释了观察者模式的原理和作用。观察者模式是一种一对多的依赖关系,允许多个观察者同时监听一个主题对象,当主题对象的状态发生变化时,会自动通知所有观察者进行更新。通过观察者模式,可以实现对象状态的改变触发其他对象的自动更新。

2025-09-04 16:20:00 243

原创 策略模式-不同的鸭子的案例

介绍了策略模式在C#中的应用,以一个鸭子的例子来说明。首先定义了鸭子类以及鸭子的行为(方法),然后通过继承和实现接口的方式来定义不同种类的鸭子的特性。介绍了策略模式的概念,将相同的算法封装在不同的类中,通过传入不同的算法对象来实现不同的行为。最后,策略模式的优势,可以避免重复的代码,提高代码的复用性和可维护性。

2025-09-04 11:15:58 403

原创 C#联合Halcon图像显示控件实现缩放平移

【代码】C#联合Halcon图像显示控件实现缩放平移。

2025-08-28 13:21:07 334

原创 C# 装箱拆箱

在 C# 中,和是值类型与引用类型之间转换的特殊机制,仅发生在和相互转换的场景中。

2025-08-08 13:44:23 430

原创 C#值类型属性的典型问题

/值类型的复制其实是建立一个副本,与原数据没有关联。

2025-07-23 15:32:55 243

原创 C# 扩展方法

它必须在一个静态类中定义。它必须是一个静态方法。它的第一个参数是用 this 关键字修饰的,指定了该方法作用于哪个类型。第一个参数的类型必须是要扩展的类型,或者是从该类型派生的类型。使用示例// 扩展方法定义// 使用扩展方法// 返回 2。

2025-07-03 12:09:29 554

原创 C# Task异步的常用方法

此静态方法接收一系列任务,并返回一个新的 Task<Task>,当其中任何一个输入任务完成时,该任务就会完成。这对于等待多个任务中的任意一个完成非常有用。此静态方法接收一系列任务,并返回一个新的 Task,当所有输入任务完成时,该任务才会完成。此静态方法用于在后台运行一个新任务,并返回与该任务关联的 Task 实例。通常,使用 Task.Run() 创建任务时,无需调用此方法,因为任务会自动启动。C# 中的 Task 类是 System.Threading.Tasks 命名空间的一部分,用于表示异步操作。

2025-07-03 09:35:14 537

原创 学习记录:C++ 模板分离编译问题详解

/ 声明和实现合并// 函数体。

2025-06-27 16:13:05 380

原创 Halcon尺寸测量之二维计量模型(create_metrology_model)

②如果要测量椭圆,调用算子add_metrology_object_rectangle2_measure( : : MetrologyHandle, Row, Column, Phi, Length1, Length2, MeasureLength1, MeasureLength2, MeasureSigma, MeasureThreshold, GenParamName, GenParamValue : Index),第一个参数是计量模型的句柄,第二和第三个参数是待测矩形的中心点坐标。

2025-06-26 16:05:02 1281 2

原创 不同循环结构的执行顺序和条件判断时机

在 C++ 中,不同循环结构的执行顺序和条件判断时机有所不同。

2025-06-19 13:51:59 496

原创 学习记录:MFC中函数名就是函数地址吗?

指针,本质上是作用域受限的全局函数,因此函数名可隐式转换为普通函数指针。存储在程序的代码段,函数名直接对应内存地址,调用时通过地址直接跳转。,二者的关系需要结合 C++ 语言特性和 MFC 的机制来具体分析。成员函数属于类的作用域,且调用时需要关联类对象(非静态成员函数还依赖。在 C++ 中,函数名本身会隐式转换为函数的地址。指针),因此其地址不能直接通过函数名隐式转换获得。: “成员函数” 需区分静态与非静态 ——会被当作函数地址使用。指针)和作用域的处理。

2025-06-19 11:04:14 246

原创 C# 状态机

【代码】C# 状态机。

2025-06-16 17:24:37 1287

原创 C# 中的Async 和 Await 的用法详解

要解决这个问题,我们必须在传统编程中编写很多的代码,但是现在我们有了Async 和 await关键字,那么我们将通过书写很少的并且简洁的代码来解决这个问题。此外,我们还将看到更多的示例,如果任何第三个方法(如Method 3)都依赖于Method 1,那么它将在Wait关键字的帮助下等待Method 1的完成。我们将创建一个新的方法,作为CallMethod,在这个方法中,我们将调用我们的所有方法,分别为Method 1、Method 2和Method 3。在这个例子中,我们将采取两个不相互依赖的方法。

2025-06-14 12:06:54 2210

原创 学习记录:MFC 动态实现宏解析

在 MFC(Microsoft Foundation Classes)中,DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 是用于支持 ​​动态对象创建​​ 的关键宏。​​动态对象创建实现​​:提供动态创建所需的运行时类型信息(RTTI)和构造函数逻辑。​​核心价值​​:实现 MFC 的动态对象模型,支持运行时灵活创建和管理对象。​​与 DECLARE_DYNCREATE 配对​​:完成类的动态创建能力。​​4. 使用动态创建​​。​​自定义动态创建逻辑​​。

2025-06-12 11:15:30 379

原创 学习记录:C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C++ 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联系,是掌握 C/C++ 开发的关键一步。​。

2025-06-06 15:42:26 1211

原创 C# 活动窗体截图:基于 Win32 API 的实现

该截图功能类基于BitBltGDI+user32.dlldwmapi.dllgdi32.dll返回窗口边框矩形(不含阴影等视觉扩展),而能获取实际显示区域,确保截图完整。BitBltBitBlt适用场景与限制BitBlt。

2025-05-15 16:27:49 597

原创 C#自定义控件-实现了一个支持平移、缩放、双击重置的图像显示控件

图像显示与缩放(支持鼠标滚轮缩放)图像平移(支持鼠标拖拽)视图重置(双击重置)网格背景显示。

2025-05-15 15:25:31 687

原创 C# 使用SunnyUI控件 (VS 2019)

C# WinForm 开源控件库

2025-05-06 14:09:33 1471

原创 C# 使用Windows API实现键盘钩子的类

主窗体需能访问此实例,建议将其存储在公共成员变量中(建议放在Program.cs)类实现(位于keyboard.cs)。:是否允许该按键传递到其他应用。接口,推荐在应用主程序中通过。当按键被拦截时,会触发。

2025-04-23 17:39:01 486

原创 C# byte[]字节数组常用的一些操作。

通过整数除法实现向上取整。+ 1:补偿截断的部分,确保结果向上取整。Length = 8→(正确)。Length = 9→(正确)。:直接数学向上取整。8.0强制浮点除法,保留小数部分。对结果向上取整。

2025-04-22 11:50:51 955

原创 C#设计模式-状态模式

【代码】C#设计模式-状态模式。

2025-04-15 11:47:08 413

原创 C# 使用.NET内置的 IObservable<T> 和 IObserver<T>-观察者模式

表示(如事件流、实时数据)。,用于注册观察者。表示,响应数据变化。:接收新数据。:处理错误。:响应数据流结束。

2025-04-15 11:25:16 730

原创 软件设计模式

示例:跨平台的 UI 组件库(如 Windows/Mac 的按钮和文本框)。定义对象间的一对多依赖,当一个对象状态改变时,所有依赖者自动更新。示例:虚拟代理(延迟加载图片)、保护代理(权限控制)。示例:构造一个包含多种部件的复杂对象(如电脑组装)。示例:不同形状(圆形、方形)和颜色(红、蓝)的组合。示例:克隆一个配置好的对象(如游戏中的敌人复制)。关注对象的创建机制,提高代码的灵活性和可复用性。为其他对象提供一种代理以控制对这个对象的访问。将请求封装为对象,支持请求的排队、日志或撤销。

2025-04-15 09:28:13 636

原创 C#Task.ContinueWith 方法深度解析

Console.WriteLine($"异常: {t.Exception.InnerException.Message}");.ContinueWith(t => Console.WriteLine($"最终结果: {t.Result}"));task.ContinueWith(previousTask => { // 前置任务完成后执行的代码 });task.ContinueWith(t => Console.WriteLine("完成"),if (t.IsFaulted) { /* 处理异常 */ }

2025-04-10 11:48:07 1532

原创 C# 关于 async 中直接调用 .Result死锁的问题

需要返回 UI 线程继续执行,但 UI 线程已经被阻塞,导致互相等待(死锁)。:UI 卡死,因为 WinForms 有同步上下文。等待 UI 线程空闲,而 UI 线程又在等待。不会阻塞 UI 线程,而是让 UI 线程在。期间去处理其他消息(如鼠标移动、按钮点击)。,无法处理其他消息(如界面渲染、用户输入)。,因为控制台程序没有 UI 同步上下文。(但不适用于 UI 更新)。阻塞了 UI 线程,而。在 1 秒后正常更新。

2025-04-10 09:03:29 680

原创 十六进制(Hexadecimal)简介

十六进制是一种使用16个符号表示数值的系统:数字0-9(表示0-9)字母A-F(表示10-15)

2025-03-25 16:34:53 2847

原创 C#中获取字节数据的高字节和低字节

在C#中,你可以使用位操作来获取16位或更大数值的高字节和低字节部分。小端序(Little-Endian):低字节在前(x86架构)大端序(Big-Endian):高字节在前(网络字节序)对于32位整数(uint/int)

2025-03-25 16:12:21 969

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除