- 博客(33)
- 收藏
- 关注
原创 C# 混淆代码工具--ConfuserEx功能与使用指南
本文介绍了 ConfuserEx,一个开源的 .NET 应用程序保护工具,旨在通过代码混淆、字符串加密等技术防止反编译和篡改。它支持多种混淆技术,包括名称混淆、控制流混淆和资源加密,并提供灵活的配置选项以满足不同需求。ConfuserEx 可通过 GUI 或命令行工具使用,支持手动设置运行时环境和添加混淆规则,同时可以集成到 MSBuild 自动化构建流程中。
2025-04-12 11:26:37
779
原创 设计模式|策略模式 Strategy Pattern 详解
本文详细介绍了策略模式,一种行为型设计模式,用于封装算法并实现运行时切换。策略模式通过定义策略接口和具体策略类,将算法与业务逻辑解耦,提高系统的扩展性和维护性。文中展示了策略模式在解决扩展性差、灵活性不足等问题上的优势。同时,提供了C#代码示例,包括策略接口、具体策略类、上下文类的实现,以及UML类图和时序图。此外,探讨了策略模式的优缺点、最佳实践场景,以及结合工厂模式、享元模式等扩展优化方法。最后,提出了使用策略模式的注意事项,强调避免过度设计和合理控制策略类数量。
2025-03-02 16:46:02
542
原创 设计模式| 观察者模式 Observer Pattern详解
本文探讨了观察者模式的实现与优化,详细介绍了其在不同场景下的应用。观察者模式是一种行为设计模式,通过定义对象间的一对多依赖关系,实现状态变化的自动通知。文章介绍了观察者模式的核心角色和实现原理,包括被观察者(Subject)和观察者(Observer)的职责。展示了经典实现方式、委托与事件实现、IObservable<T>/IObserver<T>接口实现以及System.Reactive扩展库的使用。文章探讨观察者模式的扩展优化,如更改管理器、注册机制、触发机制和信息传递机制,进一步提升了模式的灵活性。
2025-02-23 15:19:14
887
原创 C#中的非托管资源释放机制详解|Finalizer与Dispose模式
本文深入探讨了C#中资源管理的核心问题,包括托管资源、非托管资源以及混合型资源的管理策略。详细分析了终结器(Finalizer)和IDisposable接口的实现与使用方法,探讨了它们在资源释放中的优缺点及最佳实践。通过具体示例,展示了如何通过using语句、双重实现机制以及线程安全设计确保资源的高效管理和安全释放。文章总结了资源释放的基本原则,并提供了实践建议,帮助开发者优化程序的健壮性和性能。
2025-02-09 16:41:54
1190
原创 适配器模式详解:解决接口不兼容问题的灵活设计模式
适配器模式是一种结构型设计模式,旨在解决接口不兼容的问题,使得原本无法协同工作的类或系统能够顺利交互。它通过引入一个中间层(适配器)来将一个接口转换为另一个接口,从而在不修改原有代码的情况下实现代码的复用和解耦。适配器模式分为类适配器和对象适配器两种实现方式,前者通过继承实现,后者通过组合实现。此外,还有双向适配器和缺省适配器等变体,分别用于双向接口适配和简化接口实现。适配器模式适用于集成第三方库、复用旧代码、统一接口标准、跨平台开发等场景。尽管适配器模式能提高系统的灵活性和扩展性,但也可能增加系统的复杂性
2025-01-18 21:10:49
1046
原创 C#基础 枚举 Enumeration从基础到进阶
本文全面介绍了枚举的定义、使用及高级技巧。首先阐述了枚举基础,包括其定义语法、优点、基本使用方法和设计规范。接着深入探讨了枚举的存储、值与继承限制,指出枚举底层以整数存储,占用空间取决于基础类型,且继承有严格限制。最后,讲解了枚举的进阶用法,如比较、标志枚举与位运算、泛型方法、自定义属性和扩展方法等,旨在帮助开发者更高效地使用枚举,提升代码质量和开发效率。
2025-01-12 17:53:01
1293
原创 任务执行模式全解析:并发、并行、串行与同步、异步的对比
文章阐述了并发、并行、串行、异步和同步这五种任务执行方式。并行利用多核CPU或多处理器系统同时执行多个任务,适用于CPU密集型任务。并发通过多线程或多进程在计算机上交替执行任务,提高资源利用率,适用于多任务处理场景,但增加了系统复杂性。串行是任务依次执行的方式,适用于单处理器系统或需要严格顺序的任务场景。同步任务按顺序执行,适用于需要保证任务顺序和结果一致性的情况。异步任务开始后主任务可继续执行,适用于I/O密集型任务,提高响应性和吞吐量。文章还对比了异步编程和并行编程.
2025-01-05 19:53:46
1179
原创 VisualStudio插件开发快速了解与实践:一键创建新文件
本文介绍了一个Visual Studio插件开发Demo,旨在简化日常开发中从现有代码提取部分内容并创建新文件的过程。插件通过右键菜单选项“🆕Create To New File”实现,支持提取接口、类、枚举或结构体的完整内容,并在项目中自动创建同名新文件。插件还处理文件冲突,并在状态栏实时显示创建状态。文章详细描述了插件的需求背景、功能实现、环境安装、项目创建、命令执行、功能实现细节以及测试和安装。
2024-12-01 09:00:00
941
原创 .NET桌面应用架构Demo与实战|WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper
本文通过展示一个AI Prompt管理应用,探讨了WPF+MVVM+EFCore+IOC+DI架构在实际项目中的应用。文章首先介绍了数据模型的构建和EFCore的使用,实现了Code First的数据库设计。接着,通过定义服务接口和实现,展示了业务逻辑的处理方式,并采用依赖注入来管理服务的生命周期。在UI层,利用WPF和MVVM设计模式,实现了数据与界面的分离,提升了代码的可维护性。此外,通过AutoMapper简化了DTO与ViewModel之间的映射。整个应用架构遵循SOLID原则,易于扩展和测试。
2024-11-18 15:31:06
1348
原创 WPF拖拽交互全攻略及实现自定义拖拽控件及数据交换技巧解析
本文介绍了在WPF中实现拖拽功能的概念和步骤。拖拽操作涉及拖动源(Drag Source)和拖动目标(Drop Target),数据通过数据对象(Data Object)传递。在WPF中,通过DoDragDrop方法启动操作,设置AllowDrop属性为true来启用放置目标,文章还提供了使用示例。此外,还讨论了在拖拽操作期间可能需要处理的其他事件,如GiveFeedback,以及如何使用DataObject方法来检查和处理数据。最后,提到了在实际开发中遇到的问题,并提供了一个自定义拖拽控件的实现思路和代码
2024-10-24 08:15:00
3964
原创 C# 代码启动解决方案、调试运行或关闭项目(VS2022)
本文介绍了如何在Visual Studio外部开发一个工具,以运行指定的解决方案。首先,使用`System.Diagnostics.Process`类和`ProcessStartInfo`对象来启动外部程序或打开文件。然后,通过DTE2接口自动化Visual Studio,实现项目管理、代码操作和调试支持等功能。文中提供了详细的代码示例,展示了如何获取DTE2对象、启动和停止解决方案的调试。最后,文章提供了参考链接,以便读者进一步学习和探索。
2024-10-13 15:38:38
1653
原创 WPF|依赖属性SetCurrentValue方法不会使绑定失效, SetValue方法会使绑定失效?是真的吗?
文章通过实验和源码分析探讨了WPF中依赖属性的`SetValue`、`SetCurrentValue`和`ClearValue`方法。实验表明`ClearValue`会清除本地值并使数据绑定失效;`SetValue`和`SetCurrentValue`在`TwoWay`绑定模式下不会破坏绑定,而在`OneWay`模式下会失效。
2024-10-07 18:01:12
1443
原创 浮点数始末详解|科学计数法、浮点数表示、精度有效值、规格化与非规格化
本文详细介绍了科学计数法和浮点数的应用。科学计数法通过将一个数表示为1到10之间的数与10的幂的乘积,简化了大数或小数的表示。文章解释了科学计数法的定义、应用场景、优点,以及如何通过有效数字来确定数值的精度。进一步深入到浮点数,解释了浮点数如何采用科学计数法来表示数值,在计算机中的存储方式。讨论了IEEE 754标准下的浮点数表示,组成。同时,也提到了浮点数运算可能带来的精度损失问题,如舍入误差、累积误差、下溢和上溢。展示了如何在C#中处理浮点数,并强调了在编程中处理浮点数时需要注意的精度问题和比较技巧。
2024-09-16 16:22:00
2247
原创 WPF Behavior 、Trigger详解|概述、使用场景、区别、示例、源码如何实现
本文深入探讨WPF中的Trigger和Behavior,两种用于增强控件交互性和功能性的技术。Trigger通过条件自动改变控件样式或行为。Behavior则提供更复杂的交互逻辑,通过可重用的封装行为实现控件行为的动态改变。展示了如何使用这些技术,讨论了它们之间的关系与区别,还介绍了如何通过源码学习实现事件检测和命令执行,以及如何创建自定义Behavior,一些最佳实践和资源链接。
2024-09-08 20:48:45
2148
原创 WPF Window始末|快速了解、自定义Window控件
本文全面介绍了WPF应用程序中显示和管理窗口的核心类`Window`。它涵盖了窗口的基本属性、使用方式以及自定义方法。窗口分为非工作区和工作区,其中非工作区包括标题栏、图标、按钮等,由WPF实现;工作区用于添加应用内容。文章还详细介绍了窗口的属性,如外观、位置、大小和可见性属性,以及窗口的生命周期管理,包括创建、显示、关闭和事件处理。此外,还提供了窗口使用的示例代码,包括创建窗口、打开模态和非模态窗口、设置启动窗口、激活窗口以及窗口所有权的设置。最后,给出了如何自定义窗口样式示例
2024-08-29 20:56:51
5383
原创 啼笑皆非的错误记录| WPF 自定义控件 数据混乱
在开发WPF自定义控件SubTitles时,发现ItemsControl中的SentenceBox控件显示相同文本问题。原因是SentenceBox的依赖属性WordsProperty在注册时误用静态默认值,导致所有实例共享同一集合对象。依赖属性应允许动态获取值,注册时应避免设置静态默认值,特别是可变类型。修正方法是在属性更改处理程序中动态创建实例级默认值。总结:注册依赖属性时,对不可变类型可直接设置静态默认值;对可变类型,应在属性更改处理程序中设置实例级默认值,避免数据共享导致的问题。
2024-08-21 11:24:48
348
原创 WPF 快速了解并实现美观的Slider自定义控件|Slider详解|示例|效果
本文深入探讨了WPF中Slider控件的自定义技巧,从基本构造到高级视觉效果的实现。首先,展示了进度条的动态效果,随后详细描述了如何设置Slider的Thumb样式和刻度展示。介绍了Slider的核心属性如Value、Minimum、Maximum,并提供了XML示例代码。文章还解释了如何自定义Track和Thumb,并通过代码示例展示了Thumb在不同状态下的视觉效果。此外,探讨了TickBar的自定义方法和两种自定义刻度显示效果的技术。
2024-08-19 21:17:31
2257
3
原创 解决 Visual Studio 窗口内容不显示问题
在使用 Visual Studio 2022 时,调试、查找、输出等窗口中的内容有时会不显示,很是影响开发和调试进度。虽然目前没有找到彻底解决的办法,但可以通过以下方法暂时解决这个问题。
2024-08-06 14:16:52
2930
原创 C# 枚举器与迭代器始末|详解IEnumerator、 IEnumerable、yield、foreach与迭代器模式
在 C# 中,可以使用 foreach 遍历集合。之所以可以使用 foreach,是因为它们实现了 IEnumerable 接口,也被称为可枚举对象。IEnumerable 接口中的方法 IEnumerator GetEnumerator(); 返回一个枚举器。这一过程符合设计模式中的行为型——迭代器模式,使用枚举器和可枚举对象的组合实现集合的迭代。因此,迭代器可以看作是枚举器和可枚举对象的组合。本文将详细介绍上述内容,并提供贴合实际应用的示例代码。
2024-08-02 19:07:49
1269
原创 位运算始末 |详解、特性思考、示例、运算巧思、相关算法、实际应用 (以C#为例)
本文详细介绍了位运算符及其在编程中的应用。文章首先概述了常见的位运算符,如与(AND)、或(OR)、异或(XOR)、取反(NOT)、左移和右移,并提供了记忆技巧。解释了位运算符适用于整数和布尔类型而不适用于字符串和浮点数的原因。文章还通过C#代码示例展示了如何使用这些运算符,并讨论了我对它们特性的推理,它们在实际开发中的应用,如权限管理、数据压缩和图像处理。提供了相关算法的链接和示例代码。
2024-07-25 21:23:15
656
原创 WPF 窗体增加置顶按钮Demo
许多应用窗口除了最大化、最小化、关闭按钮外还包含固定置顶按钮,例如微信、一些播放窗口。这里尝试用WPF来实现这一功能。
2024-07-21 19:17:17
723
原创 C# 基础 IComparable<in T> 与 IComparer <in T>内容详解、使用场景、示例及区别
本文主要介绍了C#基础之,C#中比较的接口,IComparable 与 IComparer
2024-07-16 12:23:08
1073
原创 WPF 应用程序:系统托盘集成与快捷键唤醒及自定义
最小化应用程序时,将应用程序置于系统托盘,并能够自定义快捷键快速打开应用程序,是很多App必备的功能。在此整理了一下WPF具体实现的过程。
2024-07-13 13:44:04
1769
原创 WPF Icon加载报错处理:参数“picture”必须是可用作Icon的参数
WPF Icon加载报错处理:参数“picture”必须是可用作Icon的参数问题排除与解决
2024-07-04 10:03:43
642
原创 WPF + NAudio 实现音波可视化
是由 Mark Heath 编写的开源 .NET 音频库,提供丰富的音频操作功能,也提供了音频可视化的Demo。计算当前和下一个峰值的最大和最小值,绘制间隔条,同样将宽度、位置、高度和颜色记录到。:采样峰值,可能是指在数据集中随机或按照某种规则选取一定数量的峰值进行计算。:最大均方根值,即从数据集中找出具有最大均方根值的数据点作为峰值。:最大绝对值,即从数据集中找出具有最大绝对值的数据点作为峰值。根据峰值和设置的高度计算音波上半部分和下半部分的线条高度,:平均值,即计算数据集中所有点的平均值作为峰值。
2024-06-29 10:09:40
627
原创 WPF实现Emoji表情包选择器EmojiPicker
因为很喜欢用Emoji表情包,而我没有找到满足我的需求的控件(或者说就是有瘾,就是想自己开发一个),于是就做了这个EmojiPciker控件,以供参考。
2024-06-17 20:39:33
582
原创 WPF通过修改Background的Alpha从而设置透明背景颜色
在WPF开发中,直接使用`Opacity`设置控件的透明度会影响其子控件的透明度。为了解决这个问题,可以通过修改颜色的Alpha值实现设置透明度。这里给出两个方法实例,通过使用Converter或者通过使用附加属性。
2024-06-11 08:59:24
1593
VisualStudio插件开发快速了解与实践:一键创建新文件
2024-11-30
.NET桌面应用架构Demo与实战-WPF+MVVM+EFCore+IOC+DI+Code First+AutoMapper
2024-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人