自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 仿射变换和透视变换

1) 用途旋转 (线性变换),平移 (向量加).缩放(线性变换),错切,反转2) 方法仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直线)和“平行性”(二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。任意的仿射变换都能表示为乘以一个矩阵(线性变换),再加上一个向量 (平移) 的形式.。

2026-02-11 14:13:33 463

原创 C# 拆解 “显式接口实现 + 子类强类型扩展” 的设计思想

/ 子类实现抽象属性,返回 PostgreSQL 专属连接对象这里的核心:不同数据库驱动(Npgsql、SqlClient)可以实现自己的连接对象,DbCommand 不用关心具体是哪种连接,只负责提供通用接口和公共属性——这就是“扩展开放、修改关闭”的设计原则,也是框架能跨数据库的关键。显式接口实现(满足框架通用)+ 公共属性(方便开发者使用)+ 抽象属性(子类扩展),三者配合,既保证标准化,又保证易用性和扩展性。

2026-02-07 10:56:24 784

原创 win11 应用程序控制策略已阻止此文件

智能应用控制是Windows 11的一项安全功能,旨在阻止可能有害的应用运行。当应用尝试加载未使用受信任证书签名的文件、驱动或其他组件时,系统会因无法验证其安全性而拦截。即使应用本身可能安全,但其依赖的未签名文件仍会被阻止。此功能通过结合微软的应用智能服务和代码完整性技术,对恶意软件、潜在不需要的应用(PUA)及未知未签名代码提供主动防护。如何解决被阻止的问题。

2026-02-07 08:43:04 2437

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

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

2026-01-22 10:56:40 286

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

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

2026-01-09 14:24:38 198

原创 C# 多返回值写法

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

2026-01-05 17:27:15 419

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

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

2026-01-05 11:16:31 315

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

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

2026-01-04 16:54:19 478

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

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

2026-01-04 16:15:52 649

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

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

2025-12-30 17:07:53 352

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

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

2025-12-18 09:06:13 245

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

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

2025-11-27 10:49:48 357

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

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

2025-11-25 09:19:19 248

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

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

2025-11-24 15:44:32 205

原创 Halcon基于形状模板匹配

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

2025-09-08 15:58:18 301

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

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

2025-09-05 16:48:10 281

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

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

2025-09-04 16:20:00 249

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

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

2025-09-04 11:15:58 412

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

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

2025-08-28 13:21:07 365

原创 C# 装箱拆箱

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

2025-08-08 13:44:23 457

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

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

2025-07-23 15:32:55 265

原创 C# 扩展方法

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

2025-07-03 12:09:29 576

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

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

2025-07-03 09:35:14 549

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

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

2025-06-27 16:13:05 409

原创 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 1313 2

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

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

2025-06-19 13:51:59 517

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

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

2025-06-19 11:04:14 267

原创 C# 状态机

【代码】C# 状态机。

2025-06-16 17:24:37 1361

原创 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 2280

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

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

2025-06-12 11:15:30 404

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

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

2025-06-06 15:42:26 1249

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

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

2025-05-15 16:27:49 638

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

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

2025-05-15 15:25:31 760

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

C# WinForm 开源控件库

2025-05-06 14:09:33 1732

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

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

2025-04-23 17:39:01 508

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

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

2025-04-22 11:50:51 1007

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

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

2025-04-15 11:47:08 435

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

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

2025-04-15 11:25:16 764

原创 软件设计模式

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

2025-04-15 09:28:13 643

原创 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 1619

空空如也

空空如也

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

TA关注的人

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