- 博客(28)
- 收藏
- 关注
原创 C# 锁机制——【2】深入原理
文章介绍了.NET锁优化机制:CLR通过对象头实现薄锁/厚锁状态机,JIT内联快速路径并自适应自旋;CAS操作须用SpinWait退避防止总线风暴;高竞争下会出现锁车队效应,需合理使用lock和自旋。
2026-09-04 16:27:05
403
原创 C# 锁机制——【1】基础讲解
本文梳理 C# 全套锁机制,从 CPU 多级缓存、MESI 协议切入,讲解多线程三大底层问题:可见性、有序性、原子性,解释缓存、指令重排、内存屏障、非原子操作带来的各类诡异并发 bug。依次解析 lock、Mutex、SemaphoreSlim、ReaderWriterLockSlim、Interlocked、SpinLock、Monitor 条件变量,以及 Concurrent 系列线程安全集合,介绍各同步原语底层实现、锁升级逻辑、典型用法和高频踩坑点。对比跨进程能力、性能、异步支持差异,给出工程化选型建
2026-09-04 09:34:50
279
原创 C# 上位机 Bug 记录:本地 UI 日志正常,MES 接口时间格式解析失败(隐形 Unicode 特殊字符)
本次记录一个非常隐蔽的跨系统 Bug:C# 本地 UI、日志、时间格式展示全部正常,但通过 HTTP JSON 推送到 MES 时,持续报 “时间格式非法”。抓包后发现,时间字符串中的横杠被序列化为\u2011,原因是格式化字符串里混入了 U+2011 非断行连字符。Windows 界面渲染时几乎看不出差异,但 MES 强校验只认标准 U+002D 半角减号。问题根源是复制文档模板时带入了隐形脏字符。
2026-08-31 14:00:44
436
原创 C# 定时器——【1】基础讲解
本文详解上位机开发五类常用定时器,从底层执行模型、适用场景、优缺点、高频坑点全方位拆解,重点剖析任务重入核心疑难问题。结合工业实战梳理选型标准、防重入方案与性能误区,附带直观对比表与可落地代码,帮助开发者规避界面卡顿、数据错乱、进程残留等现场 Bug。
2026-08-28 15:44:04
351
原创 C# 特性(Attribute)——【2】工业设备参数框架设计
本篇为 C# 特性工业进阶实战,跳出基础语法讲解,聚焦工业上位机参数框架工程设计。针对工控项目参数冗余、规则分散、迭代难维护等痛点,详解特性模板化设计、元数据规范、中间层解耦、反射缓存核心方案,结合可复用代码与工程避坑原则,给出适配长期迭代的工业参数架构落地思路。
2026-08-28 13:33:35
326
原创 C# 特性(Attribute)——【1】基础讲解
本文通俗易懂讲解C#特性核心原理,摒弃空洞理论,聚焦基础语法与工业上位机实战场景。结合设备UI自动生成、PLC协议路由、参数校验等工控常用案例,讲解特性结合反射的落地方式,同时梳理使用规范与避坑要点,帮助开发者用特性优化工控项目代码结构。
2026-08-28 09:39:13
458
原创 C# 进阶:ref foreach、Span<T>、CollectionsMarshal.AsSpan,如何原地修改 struct?
在C#中,直接修改值类型集合(如List<struct>)的元素时,foreach遍历获取的是副本,修改无法生效。解决此问题的进阶方案包括: 数组+ref:通过ref直接修改数组元素,性能最优但仅限数组类型。 ref foreach:遍历时获取元素引用,需集合支持ref枚举器,适用于底层代码。 Span<T>:提供连续内存视图,支持高效批处理,但受限于ref struct生命周期。
2026-08-13 20:14:59
344
原创 C# 开发实录:foreach 遍历 struct ,为什么看起来改了,结果却没生效?
在C#开发中,遍历结构体(struct)集合修改数据时可能遇到“修改无效”的陷阱。由于结构体是值类型,foreach循环中获取的是元素副本而非引用,导致对副本的修改不会影响原集合。典型现象是断点调试时字段已变更,但集合数据仍为旧值。此问题易被误判为通讯覆盖、线程同步等复杂问题,实际只需改用for循环按索引取出、修改并写回即可解决。
2026-08-13 19:57:01
487
原创 迪米特法则(LoD):别总去打听“朋友的朋友”
迪米特法则:降低对象间耦合的设计原则 摘要 迪米特法则(LoD)强调对象间应保持最小知识,避免过度了解其他对象内部结构。当代码出现多层链式调用(如order.Customer.Address.City)时,表明对象耦合过深,违反了这一原则。这种设计会导致系统结构变更时产生连锁反应。 遵守迪米特法则的关键在于: 对象只与直接朋友交互 避免穿透访问"朋友的朋友" 让每个对象封装自身逻辑 典型案例显示,将员工信息展示逻辑内聚在Employee类中,比在外部报表类中直接访问员工属性更符合该原则。
2026-03-26 08:15:18
373
原创 依赖倒置原则(DIP):别让业务层直接绑死底层实现
摘要:依赖倒置原则(DIP)是解决代码耦合问题的关键方法。该原则指出高层模块不应依赖低层模块,而应共同依赖抽象。通过生活化的插座比喻,说明抽象接口如同标准插座,使不同设备能灵活替换。违反原则的典型症状包括业务类直接new底层对象、切换实现需修改多处、单元测试困难等。在数据采集系统案例中,直接依赖串口和文件存储的实现会导致修改困难,而通过定义ICommunicator和IDataStore接口,再注入具体实现,可使系统更灵活。遵循依赖倒置原则能带来实现切换方便、易于测试、降低耦合和结构稳定等优势。
2026-03-26 08:14:24
372
原创 接口隔离原则(ISP):别让接口越来越胖
接口隔离原则(ISP)强调客户端不应被迫依赖不使用的接口方法,提倡将大而全的接口拆分为小而专的独立接口。本文通过设备控制场景的案例,对比了违反ISP的"胖接口"问题与遵循ISP的合理设计: 问题接口强制实现类编写冗余方法或抛出异常 改进方案按能力拆分为IReadable、IControllable等单一职责接口 不同设备类只需实现相关接口,避免无关方法 调用方只需依赖所需能力对应的接口 典型症状包括实现类存在大量空方法、NotImplementedException、接口频繁改动影响无关
2026-03-26 08:13:00
528
原创 开闭原则(OCP):加功能时,尽量别去改老代码
文章摘要: 开闭原则(OCP)是软件开发的核心设计原则,强调软件实体应对扩展开放而对修改关闭。实际开发中常见的问题是反复修改老代码来添加新功能,导致代码臃肿、维护困难。本文通过塔防游戏的敌人移动案例,对比了硬编码类型判断(违反OCP)和面向抽象编程(符合OCP)两种实现方式。正确的做法是通过抽象基类定义稳定契约,让子类实现具体行为,这样新增功能只需添加新类而无需修改原有代码。该原则能有效控制修改风险,提高代码的可维护性和扩展性。
2026-03-25 11:06:36
471
原创 单一职责原则(SRP):为什么你的类总是越改越乱?
单一职责原则(SRP)实践指南 核心要点: 定义:每个类只应有一个引起修改的原因,职责边界清晰 问题表现: 类膨胀(超千行代码) 修改时牵一发而动全身 类名模糊(如XXManager/Helper) 典型场景改进: 上位机开发中常见的"全能类"(通信+解析+日志)应拆分为: SerialCommunicator:专管设备连接/数据传输 DataParser:专注协议解析 FileLogger:独立处理日志记录 优势体现: 修改协议不影响通信模块 调整日志方式不涉及业务逻辑 问题定位更快速
2026-03-25 10:41:42
827
原创 里氏替换原则(LSP):继承不是为了“像”,而是为了“能替换”
子类应当完全继承父类的行为,保证在程序中替换父类对象为子类对象后,程序的行为不会出错。这意味着子类不仅要继承父类的属性和方法,还要遵循父类的契约,确保行为的一致性。在这个例子中,我们将考虑一个简单的场景:有多个角色类型,每个角色可以使用不同的武器,每种武器也有不同的攻击方式。每个角色可以使用不同的武器并有不同的行为,例如:士兵可以使用步枪,狙击手可以使用狙击枪,支援角色可以使用机枪。每种武器有不同的攻击方式,例如:步枪有快速的单发射击,狙击枪有高伤害的慢速射击,机枪有快速的连发射击。,从而实现不同的行为。
2025-03-07 16:43:50
694
原创 【Web3面试题库】——DeFi
DeFi(去中心化金融,Decentralized Finance)是基于区块链技术,特别是以太坊等智能合约平台构建的金融系统,旨在通过去中心化的方式重构传统金融服务。DeFi 利用智能合约、去中心化交易所(DEX)、稳定币、借贷协议等技术,提供传统银行和金融服务(如借贷、支付、保险等)的去中心化版本。DeFi 的核心理念是开放、透明和无需许可,任何人只要有互联网连接和数字资产,都可以参与到 DeFi 协议和产品中,避免了传统金融体系中的中介机构、限制和费用。DeFi(去中心化金融)
2024-12-29 12:03:12
1678
原创 【Web3面试题库】——openzeppelin
是一个开源的智能合约库,提供了许多经过审计、可重用并且高安全性的合约模块。它专为以太坊和其他区块链平台开发,帮助开发者快速、可靠地构建去中心化应用(DApp)。OpenZeppelin 提供的智能合约涵盖了从代币标准、治理合约到安全性措施等多个方面,可以极大地简化开发过程并减少潜在的安全风险。该库的核心目标是让开发者能够构建更安全、更易于维护的智能合约应用,而无需从零开始编写代码。
2024-12-28 22:55:02
1862
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅