- 博客(180)
- 收藏
- 关注
转载 事件和委托应用和区别
一个广为流传的错误说法:事件是一种特殊的委托希望看完这个例子你能理解事件的意义,事件与委托的关系,以及上面那句话为什么不合理假设你有一个公司,你有10名员工,1000元的股票市值,公司倒闭会造成裁员9人,市值蒸发900元。你会怎么写?
2024-05-24 23:42:32 68
原创 书籍推荐计算机相关
计算机程序的构造和解释》(Structure and Interpretation of Computer Programs):这本书被誉为“程序设计的圣经”,它对程序设计和计算机语言的设计有着深远的影响。《C程序设计语言》(The C Programming Language):这本书是C语言的经典之作,它简洁、清晰地介绍了C语言的设计理念和编程方法。《代码大全》(Code Complete):这本书是“优秀的编程实践的百科全书”,它详细讨论了如何编写高质量、可维护的代码,是所有程序员的必读之作。
2024-05-21 13:42:17 200
原创 自动配置状态参数
请注意,在这个例子中,我假设了 XML 文件的格式,并且根据这个格式编写了相应的加载逻辑。此外,由于 Stateless 库的 StateMachine 类在配置时通常是链式的,所以我在 Load 方法中直接进行了配置。对于触发事件,你通常不需要在 XML 中明确列出它们,因为你可以在定义转移时隐式地定义它们。在使用 Stateless 开源库时,你可以通过 XML 文件来定义状态机的状态、转移和触发事件,并编写代码来读取 XML 文件并自动配置 Stateless 状态机。
2024-05-17 18:51:43 222
原创 状态机不同特性使用举例(使用stateless)
/ 设置状态进入和离开时的动作.OnEntry(() => Console.WriteLine("开始浏览商品")).OnExit(() => Console.WriteLine("浏览商品结束"));.SubstateOf(State.Browsing) // 继承自Browsing状态.OnEntry(() => Console.WriteLine("商品已添加到购物车")).OnExit(() => Console.WriteLine("离开购物车"));
2024-05-17 18:42:57 205
原创 KeyValuePair和Dictionary和Tuple区别和应用
KeyValuePair是一个简单的键值对容器,而字典则是一个包含多个键值对的集合,提供了更强大的数据管理和访问功能。KeyValuePair是一个表示键值对的数据结构,由键(Key)和与之相关联的值(Value)组成。查找:Tuple 不支持基于元素的查找,而 Dictionary 支持快速的基于键的查找。键的唯一性:Dictionary 要求键是唯一的,而 Tuple 没有这样的要求。类型安全:Dictionary 的键和值都是类型安全的,即键和值都有明确的类型。它通常用于实现查找表、缓存和符号表等。
2024-05-16 14:12:44 411
原创 编程中有哪些工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误
当你在代码中放置这样的断言时,你实际上是在告诉编译器:“在调试模式下,我确信这个条件(在这里是 fsm!= null)必须为真。除了 Debug.Assert,还有其他断言库,如 NUnit、xUnit 和 MSTest,它们提供了更丰富的断言方法和更好的测试框架。在编程中,除了 Debug.Assert,还有一些类似的工具和方法可以帮助开发者在开发过程中捕获和避免潜在的错误。防御性编程:使用断言是防御性编程的一部分,它有助于在错误发生时立即捕获它们,而不是让它们潜伏在代码中,直到更晚的时候才导致问题。
2024-05-16 10:23:55 263
原创 ⚛⚖⚘一些特殊符号Unicode字符
字符“⚙”(U+2699)是一个Unicode字符,属于“补充符号和图片”(Supplemental Symbols and Pictographs)区块。特殊字体和排版:一些特殊的字体或排版设计中可能会包含这个字符,用于创建独特的视觉效果或表达特定的主题。聊天和社交媒体:在聊天应用或社交媒体平台上,用户可能会用它来表达与机械、工程或技术相关的概念或情感。⚚ 正交十字架(Orthodox Cross, U+269A)⚔ 交叉的剑(Crossed Swords, U+2694)
2024-05-16 09:09:45 128
原创 简易状态机
它是一个基于Spring框架的状态机库,提供了基于注解的方式来定义状态和状态转换。Stateless是一个轻量级的.NET状态机库,它支持以声明式的方式定义状态机,并提供了一种简洁的API来触发事件和查询状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。这只是一个简单的状态机框架示例,你可以根据需要扩展它,比如添加更复杂的逻辑、状态继承、状态转换的守卫条件等。可以定义一个基础的State类来表示状态,以及一个StateMachine类来管理状态的转换。1现态:是指当前所处的状态。
2024-04-27 19:41:35 404
原创 System.Exception有哪些类型分别什么意思
这些子类可以根据异常的来源和性质进行分类,例如系统异常(System.SystemException)和应用异常(System.ApplicationException)。而应用异常则是由应用程序生成的错误。System.SystemException 类是 System.Exception 的一个直接子类,它表示由系统引发的异常。尽管在较新的.NET版本中,使用自定义异常类而不是 ApplicationException 更为普遍,但它在早期版本中确实被用作应用程序级异常的基类。
2024-04-25 15:43:37 368 1
原创 一个缓存泛型自动处理队列,留有处理事件接口
以下是一个简单的泛型缓存队列工具的示例,它使用了System.Collections.Concurrent命名空间下的BlockingCollection作为线程安全的队列,并通过Task在后台自动处理队列中的项。在C#中,创建一个通用泛型缓存队列工具通常涉及到使用泛型(T)来支持任意类型的队列项,并且实现先进先出(FIFO)的队列逻辑。为了提供自动处理和事件通知的功能,我们可以使用后台线程来处理队列中的项,并通过事件或委托来通知监听者队列的状态变化。
2024-04-24 15:27:39 434 1
原创 System.IO.Path应用说明
根据具体的文件和目录操作需求,你可能还需要使用其他方法,如 DirectorySeparatorChar 属性(返回当前操作系统使用的目录分隔符字符)和 AltDirectorySeparatorChar 属性(返回备用目录分隔符字符,在Windows中通常是 /)。在C#中,System.IO.Path 类提供了一组静态方法和属性,用于处理文件系统中的文件路径。// 例如 “oahgjdi.tmp”GetTempFileName: 在系统的临时文件夹中创建一个唯一的临时文件,并返回其完整路径。
2024-04-24 14:56:51 265
原创 一个快速克隆方法引出深浅拷贝说明
换句话说,它执行的是一个成员级的克隆,对于引用类型的字段,它复制的是引用本身,而不是引用的对象。需要注意的是,MemberwiseClone方法创建的是浅拷贝,这意味着如果对象包含引用类型的字段,那么这些字段在克隆后的对象中将仍然引用原始对象中的相同实例。MemberwiseClone方法创建一个当前对象的浅拷贝(shallow copy),它会复制对象的所有字段到新的对象上,但是如果字段是引用类型,则复制的只是引用,而不是引用的对象本身。因此,对于引用类型的字段,原始对象和克隆后的对象将共享相同的引用。
2024-04-19 19:32:51 398
原创 System.ComponentModel.DataAnnotations 使用介绍
RequiredAttribute:确保数据字段的值是必须的,不能为null或空。KeyAttribute:标识一个属性作为实体的主键。MaxLengthAttribute 和 MinLengthAttribute:定义字符串属性的最大和最小长度。StringLengthAttribute:同时定义字符串属性的最大和最小长度。RegularExpressionAttribute:用于验证属性值是否符合指定的正则表达式。RangeAttribute:用于验证数值属性是否在指定的范围内。
2024-04-08 22:09:35 763
原创 属性显示到表格和获取
C#对当前类中只对某特性的属性,把属性的名称、类型和值显示到表格中,并且根据不同数据类型对应不同的单元格类型,同时这些值可以在表格中修改,再从表中中读取数据到属性中。
2024-03-25 19:28:03 226
原创 特定特性的属性进行序列化存取
如果你想对当前类中的特定特性的属性进行序列化和反序列化,你可以通过自定义一个特性(Attribute)来标记这些属性,并在序列化和反序列化的过程中仅处理这些带有特定特性的属性。
2024-03-25 19:02:31 375
原创 VisionPro 9.0 64位下载地址
这些都是目前康耐视提供下载的VisionPro,如果你需要低版本如8.3请看:VisionPro8.3官方原版下载地址、Vision Pro8.2版官方原版下载无需加密狗。原文链接:https://blog.csdn.net/weixin_42105843/article/details/118298055。
2024-03-24 20:57:55 787
原创 C# WinForms应用程序中,FileSystemWatcher使用监视文件系统更改
在C# WinForms应用程序中,FileSystemWatcher 类用于监视文件系统更改,例如文件的创建、删除、修改以及目录的更改。现在,当你运行WinForms应用程序时,FileSystemWatcher 将开始监视你指定的目录中的文件更改,并在触发相应的事件时显示消息框。你可以根据需要调整事件处理程序中的逻辑,比如将更改记录到日志文件中,而不是显示消息框。在窗体的构造函数或某个初始化方法中,创建 FileSystemWatcher 的实例,并设置其属性以监视特定的目录和文件类型。
2024-03-21 21:15:10 412
原创 EventWaitHandle 和 lock使用区别
在大多数情况下,对于简单的线程同步任务,lock 语句是足够且更易于使用的选择。然而,在需要跨进程同步或更复杂的同步逻辑时,EventWaitHandle 提供了更强大的功能。EventWaitHandle 和 lock 语句在 C# 中都是用于线程同步的机制,但它们之间有着显著的区别和不同的使用场景。性能:对于简单的线程同步任务,lock 通常比 EventWaitHandle 有更小的性能开销,因为它不涉及底层 Windows API 的调用。锁的范围是局部的,通常只覆盖需要同步的代码块。
2024-03-17 17:08:49 414
原创 wpf总结特点和控件通用属性
界面开发中winform开发应用程序比较方便快捷,但不够灵活,程序体积大,wpf可以解决这些问题,Windows Presentation Foundation (简称 WPF),WPF是微软Windows UI框架,.NET Framework 3.0的一部分。统一的编程模型、语言和框架,就象网页开发中的前后端分离,只不过WPF是应用于桌面窗体程序。
2024-03-05 10:48:59 805
原创 取消退出流程控制方法
在自动化设备动作流程中,认为任意想取消当前动作,常见方法是设置全局变量,实时监测变量设置决定退出。这里介绍一个System.Threading空间下的 CancellationTokenSource类,他可以设置超时,设置信息等封装。
2024-02-29 18:41:36 285
原创 C#WinForm窗体TableLayout控件布局
Winform界面TablLayout是常用的控件之一可以实现界面任意位置布局,在表格中添加其他控件默认只能占用一个单元格,如果想跨任意数量行列需要使用两个函数设置,下面举例。
2024-02-22 16:45:28 1339
原创 C#单元测试入门举例
单元测试是软件开发过程中的重要组成部分,它有助于确保代码的正确性,并在后续修改代码时提供回归测试的能力。为了测试Add方法,你可以创建一个名为CalculatorTests的测试类,并在其中编写一个或多个测试方法。在Visual Studio中,你可以通过右击测试项目中的Test菜单并选择Run All Tests来运行测试。测试结果将在测试资源管理器窗口中显示,指示每个测试是否通过。Act 阶段执行了被测试的方法(calculator.Add(a, b)),并将结果存储在result变量中。
2024-02-22 08:45:26 418
原创 程序小问-优先定义属性 而不是直接使用变量的主要原因?
通过将数据(属性)和操作数据的方法捆绑到一个类中,我们可以隐藏内部实现细节,并确保数据的正确性。只提供必要的方法来访问和修改属性,而不是直接操作变量,这有助于保护数据并减少错误。:通过将数据和操作数据的逻辑放在类中,我们可以创建可重用的组件。这意味着,如果你更改了类的内部工作方式(例如,如何计算某个属性的值),只需在类内部进行更改,而无需修改使用该类的所有代码。总的来说,定义属性而不是直接使用变量有助于提高代码的质量和可维护性,更好地组织和管理数据,以及提供更强大的工具来处理复杂的逻辑和状态管理。
2024-02-02 08:47:16 236
原创 内存分析实践-by dotmemory
小伙伴 发布软件后有可能遇到软件内存随着时间不断增加的异常,为了找到异常原因,需要内存分析工具进行检查,这里使用JetBrain 的dotMemory工具软件。如下图,工具软件在实时采集软件内存数据,点击右上角相机按钮可以生成当前内存数据,可以生成多数数据进行对比。VS软件扩展工具可以直接检索,或者百度到官网下载dotMemory软件。数据产生之后进入分析过程,首先显示的是下图整体信息。1 对当前电脑上正在运行的程序进行分析,如下图。2 选择软件位置,打开软件如图。3 软件开始内存分析。
2024-01-27 17:09:59 338
原创 数据库数据修改报错The instance of entity type ‘XXX‘ cannot be tracked
在数据库更新时,1 首先查找数据库是否包含该项 2 然后更新该项目获添加, 在先查找的时候已经跟踪数据 第二步插入会报错The instance of entity type 'XXX' cannot be tracked
2022-11-10 18:26:02 2170
转载 C#实现excle数据复制粘贴到DataGrideView表格中
C#实现excle数据复制粘贴到DataGrideView表格中//重写系统控件的检测系统快捷按键命令,只要放在展示dgv表格的窗体中就行
2022-11-06 16:50:16 1392
原创 使用SaveFileDialog将DataTable文件保存成csv文件
使用SaveFileDialog将DataTable文件保存成csv文件
2022-10-22 16:35:17 281
原创 C#批量更改控件显示名称(举例中英文语言切换)
在WinFrom开发中有中英文切换需求时需要批量更改控件的显示名称可以将控件名字和显示名称保存在xml文件中可以将控件保存进文件,也可从文件中加载来更改显示名
2022-10-19 17:19:10 966
原创 将窗体封装为dll,在新的窗体软件中显示
1、将窗体封装为dll:右击应用程序—>属性—>应用程序(输出类型)—>类库;点击“保存”,右击应用程序—>生成,此时Debug目录下多了一个主程序同名dll;2、将此dll复制到新窗体Debug目录下;3、新窗体应用程序右键点击添加—>引用,找到dll点击确定;4、在新的窗体中添加Panel2控件,将原来的窗体显示在panel中Form1Test frm = new Form1Test(); frm.TopLevel = false; //重要的一个步骤 fr
2022-03-03 14:48:49 811
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人