- 博客(237)
- 收藏
- 关注
原创 一篇文章帮你搞定数据库事务
数据库事务(Database Transaction)是数据库管理系统(DBMS)中的一个核心概念,指的是一组逻辑相关的数据库操作(如插入、更新、删除)组成的一个不可分割的单元。事务的目标是确保多个操作要么全部成功执行,要么全部不执行,从而维护数据的完整性和一致性。类比场景从账户A扣除100元。向账户B增加100元。这两个操作必须同时成功或同时失败,否则会导致数据错误(比如钱扣了但没到账)。事务就是用来保证这种“要么全做,要么全不做”的机制。
2025-03-25 11:06:27
873
原创 行为型设计模式
模板方法模式在一个抽象类中定义算法的骨架,将某些步骤延迟到子类实现。核心思想是允许子类在不改变算法结构的情况下重写特定步骤。观察者模式定义了对象之间的一对多依赖关系,当一个对象(主题)状态改变时,所有依赖它的对象(观察者)会自动收到通知并更新。责任链模式将多个处理对象连成一条链,请求沿着链传递,直到有对象处理它为止。实现了请求发送者与接收者的解耦。模式核心思想典型场景模板方法固定算法骨架,子类实现细节数据处理流程、框架设计观察者状态变化时自动通知依赖对象事件驱动系统、日志系统责任链。
2025-03-25 09:48:47
425
原创 ORM——对象关系映射
ORM框架通过其强大的抽象能力,显著提升了数据库操作的效率和安全性。尽管存在一些性能和学习成本方面的考量,但在大多数业务场景下,ORM框架的优势远大于其局限性。选择适合项目需求的ORM框架,遵循最佳实践进行开发,将帮助开发者构建出高效、健壮的数据访问层。对于现代应用程序开发而言,掌握ORM框架已成为每个开发者的必备技能。
2025-03-23 15:24:45
945
原创 Entity Framework框架
是微软开发的开源对象关系映射(ORM)框架,它充当了应用程序对象与数据库之间的桥梁。通过EF,开发者可以使用面向对象的编程方式操作数据库,而无需直接编写SQL语句。Code First:先编写实体类,然后通过迁移生成数据库表结构Database First:基于现有数据库生成实体类本文将重点演示Code First模式,这是现代开发中更常用的方式。创建Student.cs[Key]set;set;set;
2025-03-23 15:13:10
723
原创 创造型设计模式
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。创造性设计模式提供了多种灵活的对象创建方式,帮助我们在不同的场景下更好地管理对象的创建过程。单例模式确保全局唯一实例,原型模式通过复制对象来创建新对象,三大工厂模式(简单工厂、工厂方法、抽象工厂)提供了不同层次的抽象来创建对象,而建造者模式则将复杂对象的构建过程分离出来。通过合理使用这些设计模式,我们可以提高代码的可维护性和可扩展性。
2025-03-20 20:22:19
523
原创 西门子PLC
通过合理选择协议与开发工具,C#能够高效实现与西门子PLC的深度集成。建议开发者优先测试HslCommunication等成熟库,结合本文提供的代码框架快速搭建工业控制系统。通过S7-1200 PLC控制步进电机,使用C#上位机实现速度/位置调节。专用于Modbus协议的轻量级库,适合跨品牌设备集成。
2025-03-19 22:33:20
740
原创 Modbus协议
总的来说,简单是 Modbus 如此普遍的主要原因。消息检查是 Modbus 如此受欢迎的另一个原因。CRC 和 LRC 检查意味着检查传输错误的准确率达到 99%。概括来讲,Modbus就是一种用于工业控制的协议,具有免费使用、上手简单、修改方便三大特点,已经被广泛使用。此协议支持传统的RS-232、RS-485、RS-422和以太网设备。许多工业设备,包括PLC,DCS,智能仪表,变频器等都在使用Modbus协议作为他们之间的通讯标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
2025-03-18 21:37:53
946
原创 使用c#进行串口通信
串口通信(serial communication)是一种设备间非常常用的串行通信方式,大部分电子设备都支持,电子工程师再调试设备时也经常使用该通信方式输出调试信息。讲到某一种通信协议,离不开的就是物理层,物理层主要表现形式是电平信号的高低幅值,分别代表的状态。串口的物理层有很多标准,主要包含RS232标准,该标准规定了信号的用途、通信接口以及信号的电平标准;在上面的通讯方式中,两个通讯设备的“DB9接口”之间通过串口信号线建立起连接,串口信号线中使用“RS-232标准”传输数据信号。
2025-03-16 22:39:28
962
原创 WPF模板
控件模板控件模板使用XAML来定义,它们通常包含一系列布局元素和呈现元素,这些元素共同构成了控件的外观。以下是一个简单的控件模板示例,它定义了一个具有圆角和内容的按钮:</</</在这个示例中,的x:Key属性为模板指定了一个唯一的键名TargetType属性指定了模板应用的控件类型(本例中为Button)。模板内容包含一个Border元素,用于定义按钮的边框、背景和圆角,以及一个元素,用于呈现按钮的内容。数据模板数据模板同样使用XAML定义,它们通常包含用于显示数据对象的布局元素和绑定表达式。
2025-02-07 16:15:06
1110
原创 C# 中的 Task 和 Async/Await
在 C# 中,Task 表示一个可运行的异步操作。通过使用 Task,开发者可以在后台线程中执行长时间运行的操作,而不阻塞主线程(通常是 UI 线程)。这意味着用户界面可以继续响应用户的操作,提供流畅的体验。通过 C# 中的Task和,开发者能够轻松地为应用程序添加异步支持,提供更好的用户体验和更简单可读的代码。随着异步编程变得越来越普遍,掌握这些工具和技术将在编写高性能与响应式应用程序时游刃有余。
2025-01-09 11:26:28
751
原创 正则表达式
正则表达式是一种描述字符串模式的语法规则。它由普通字符(如字母、数字)和特殊字符(元字符)组成,用于定义匹配规则。正则表达式可以用于:验证字符串是否符合特定格式(如邮箱、手机号)。从文本中提取特定内容(如 URL、日期)。替换文本中的特定部分。正则表达式是一种强大的文本处理工具,掌握其基本语法和用法可以极大地提高开发效率。
2025-01-02 13:58:46
745
原创 C# 事件机制
在类中使用event关键字定义事件。// 定义一个事件// 触发事件的方法Click?如果需要传递自定义数据,可以定义自定义事件参数类。set;事件是对象间通信的重要机制,用于处理特定动作的发生。定义事件:使用event关键字定义事件。订阅事件:使用+= 运算符订阅事件。处理事件:编写事件处理程序方法。触发事件:在适当的地方调用触发事件的方法。取消订阅:使用-= 运算符取消订阅事件。
2025-01-02 11:28:32
583
原创 Action&&Func
Action 委托Action是一个不带返回值的委托,它可以接受最多 16 个参数。Action 通常用于表示一个无返回值的方法。无返回值。可以不带参数,也可以带参数(最多 16 个)。常用于事件处理或执行某些操作。// 无参数的 Action");sayHello();// 带一个参数的 Actionname!");// 带多个参数的 Actiona。
2025-01-01 20:54:35
511
原创 Lambda 表达式学习
Lambda表达式是一种匿名函数,它可以包含表达式或语句块,并且可以作为参数传递给方法或赋值给委托。Lambda表达式的核心优势在于其简洁性和灵活性,尤其是在需要传递简单逻辑时,它可以显著减少代码量。
2025-01-01 19:37:06
275
原创 C# 委托(Delegate)学习
委托是一种类型,它定义了方法的签名。通过委托,我们可以将方法作为参数传递给其他方法,或者将多个方法组合在一起进行调用。委托的主要用途是实现事件和回调机制。委托是C#中非常强大的特性,它允许我们将方法作为参数传递,或者将多个方法组合在一起进行调用。通过委托,我们可以实现事件处理、回调机制等功能。掌握委托的使用,将有助于我们编写更加灵活和可扩展的代码。
2024-12-31 21:24:50
443
原创 每日一题——第一百四十一题
10020// 函数声明// 输入短文printf("请输入一行英文短文(短文长度不超过100,单词长度不超过20),短文最后以. 结尾:\n");// 调用函数找到最长的单词// 输出结果printf("原文短文: %s\n", essay);printf("最长单词: %s\n", largestWord);printf("最长单词长度: %d\n", maxLength);return 0;/// 找到最长的单词并求其长度。
2024-12-13 14:40:30
524
原创 每日一题——第一百四十题
开辟一个与数组等长的bool数组, 用于标记是否需要删除的元素,循环比较数组的每两个元素的和,每次固定一个元素的值,与其他数组元素进行比较, 如果和为10,则标记当前一对元素为需要删除的元素 ,然后移动到下一元素,再进行比较, 依次标记完数组中的所有元素。最后将未被标记的元素存放进新的数组中。
2024-12-13 11:10:48
343
原创 每日一题——第一百三十九题
/思路:循环比较数组的每两个元素的和,每次固定一个元素的值,与所有数组元素进行比较, 如果和为10,则跳过当前元素 ,移动到下一元素,// 固定下一个元素,再依次比较与数组中元素和。如果不等,则保存当前固定下来的元素到新数组中。
2024-12-13 10:38:35
256
原创 每日一题——第一百二十八题
分析:题目要求得到字符串中最后一个单词的长度,可以反向遍历字符串,寻找最后一个单词并计算其长度。由于字符串中至少存在一个单词,因此字符串中一定有字母。首先找到字符串中的最后一个字母,该字母即为最后一个单词的最后一个字母。从最后一个字母开始继续反向遍历字符串,直到遇到空格或者到达字符串的起始位置。遍历到的每个字母都是最后一个单词中的字母,因此遍历到的字母数量即为最后一个单词的长度。//从后往前遍历,遇到空格, 索引值前移一位index--;//定义单词长度= ' '){//有效字符。
2024-11-28 15:55:44
300
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人