- 博客(130)
- 资源 (18)
- 问答 (1)
- 收藏
- 关注
原创 C# 工厂模式
工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在C#中,工厂模式通过定义一个公共接口或抽象类来创建对象,而具体的对象创建则由工厂类来实现。工厂模式主要包含三个角色:1. 抽象产品(Abstract Product):定义了产品的接口,具体产品需要实现这个接口。2. 具体产品(Concrete Product):实现了抽象产品接口的具体类。3. 工厂(Factory):负责创建具体产品的工厂类,通常包含一个创建产品的方法。
2023-08-23 15:59:50
758
原创 C# 观察者模式
在C#中,观察者模式通过定义一种一对多的依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。4. ConcreteObserver(具体观察者):具体的观察者,它继承或实现了观察者接口,并实现了更新方法。当接收到被观察者的通知时,它会执行相应的逻辑。3. ConcreteSubject(具体主题):具体的被观察者,它继承或实现了主题接口,并实现了具体的业务逻辑。1. Subject(主题):被观察者,它维护了一个观察者列表,并提供了添加、删除和通知观察者的方法。
2023-08-19 11:51:16
866
原创 C# Winform DataGridView 数据刷新问题
DataGridView 是比较常用的表格控件,在 DataGridView 中显示数据, 一般使用 dataGridView1.DataSource = 数据源,来绑定数据,数据源可以是 DataTable、List、Dictionary 等,那么如何做到及时刷新数据呢,这里我提出几个问题:1.绑定一个空的数据源,后面向数据源添加数据。2.DataGridView 绑定一个有数据的数据源,后面再向数据源添加数据。3.将数据源的某一行,某一列的数据修改为其他的数据。4.删除数据源的某一列。
2023-08-11 21:29:02
1811
原创 C# 外观模式
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。1 外观类(Facade):在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;2 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。
2023-08-01 16:50:07
848
2
原创 C# 定时器改进版
前不久写了一篇名为 “C# 定时器封装版” 的帖子,它是用的定时器 + 事件订阅 的方式完成的,虽然可以实现需求,但是它有个缺点,就是定时器的执行的间隔时间只能用固定的时间,假设你想每个事件有自己的单独间隔时间那是不行,于是后面我在想如何解决这个问题,让加入的每一个委托都能设置自己的间隔时间,劈里啪啦乱写一通后,终于实现了,虽然写的不是特别好,但还是可以用的。
2023-07-31 17:15:30
149
原创 C# 模拟 Unity3d 协程
由于 Unity3d 在开发游戏时使用的是单线程,为了给开发者提供异步相关的操作,于是开发者在 Unity3d 中加入了协程的概念,协程在 Unity3d 中用的非常多,也有些大佬觉得着玩意儿不好用,还不如用一些插件。但是,在 C# 原生的开发中,其实根本用不到这些,
2023-07-31 14:30:26
99
原创 C# 定时器封装版
在 Winform 等平台开发中,经常会用到定时器的功能,但项目定时器一旦写多了,容易使软件变卡,而且运行时间长了会造成软件的闪退,这个可能是内存溢出造成的,具体原因我也没去深究,另一个,就是在关闭软件时,经常关不掉,因为这时候定时器的线程依然还在运行,你就要把这些定时器一个个关闭,才能关闭软件,或者直接使用强制退出程序代码,非常的麻烦,后面我在想能不能封装一个定时器,使用事件的订阅机制来实现功能,后面就实现了这些功能,那么下面就开始搬代码吧。
2023-07-28 15:26:14
79
原创 C# List 文档(七)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。
2023-07-21 14:14:51
328
2
原创 C# List 文档(六)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。
2023-07-21 10:00:21
263
原创 C# List 文档(五)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。
2023-07-21 09:54:38
436
原创 C# List 文档(四)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。
2023-07-21 09:52:30
232
原创 C# List 文档(三)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。
2023-07-21 09:50:55
244
原创 C# List 文档(二)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。
2023-07-21 09:45:42
363
原创 C# List 文档(一)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。
2023-07-21 09:37:31
302
原创 C# IEnumerator 用法
IEnumerator 是所有非泛型枚举器的基接口。其泛型等效项是 System.Collections.Generic.IEnumerator 接口。C# 语言的 foreach 语句(在 Visual Basic 中为 for each)隐藏了枚举数的复杂性。因此,建议使用 foreach 而不是直接操作枚举器。枚举器可用于读取集合中的数据,但不能用于修改基础集合。方法 Reset 为实现 COM 互操作性而提供,不需要完全实现;
2023-07-15 16:06:25
910
原创 C# Linq 文档(四)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。
2023-07-14 12:13:02
1611
原创 C# Linq 文档(三)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。
2023-07-14 12:12:20
1828
原创 C# Linq 文档(二)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。
2023-07-13 17:28:39
1072
原创 C# Linq 文档(一)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。
2023-07-13 17:16:01
966
原创 C# 在控制台整齐的输出 DataTable
在Winform 平台,可以用 DataGridView 这样的控件来显示数据库的表单数据,但在 C# 控制台项目中,如果有用到数据库查询,我们想看看查询语句的效果,就比较困难了,比如,我随意写了一个控制台输出,代码如下:
2023-07-04 14:26:01
664
原创 C# params 可变参数
params 关键字用于定义一个方法的可变参数列表。它允许方法接受任意数量的参数,而不需要事先指定参数的数量。使用 params 关键字,可以更灵活地调用方法,而不必为每个不同数量的参数编写多个方法重载。要使用 params 关键字,需要在方法的参数列表中将可变参数标记为 params 关键字。这个参数必须是一个数组类型,并且必须是方法参数列表的最后一个参数。当调用方法时,可以传递任意数量的参数,它们将被封装为一个数组,并作为 params 参数传递给方法。
2023-06-29 15:41:52
104
原创 C# ref / out 用法
在C#中,ref和out关键字用于参数传递的方式。它们允许在方法内部对参数进行修改,并将修改后的值带回到调用方法中。ref关键字用于传递引用类型的参数。当使用ref关键字传递参数时,方法内部对参数的任何修改都会影响到调用方法中的原始变量。out 关键字主要用于传递值类型的参数,并且要求在方法内部对参数进行赋值。与ref不同,使用out关键字传递参数时,不需要在调用方法之前对参数进行初始化。
2023-06-29 11:32:05
530
原创 C# Winform DataGridView 控件和 DataTable
DataGridView 控件提供用于显示数据的可自定义表。类 DataGridView 允许通过使用属性(如 DefaultCellStyle、 ColumnHeadersDefaultCellStyle、 CellBorderStyle和)自定义单元格、行、列和 GridColor边框。有关详细信息,请参阅微软 DataGridView 控件中的基本格式设置和样式设置。可以使用 DataGridView 控件在基础数据源中或不使用基础数据源显示数据。
2023-06-27 19:14:42
1797
原创 C# 线程基础(二)
1.lock 只对多线程有效,对单线程无效,单线程 lock 不会导致死锁。2.不推荐使用 lock(this),因为在它外部也可以访问它。3.不应该使用 lock(string(类型)),因为 string 在内存分配上是重用的,可能会导致冲突。4.lock 中包含的代码最好不要太多,因为在这里是单线程运行的。5. .net 提供了一些线程安全的集合类,使用这些集合不需要用到 lock。6.在可以使用数据分拆的方法来使用多线程时,最好使用数据分拆而不使用 lock。
2023-06-26 16:07:02
125
原创 C# 线程基础(一)
线程(Thread)是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。线程主要是由CPU寄存器、调用栈和线程本地存储器(Thread Local Storage,TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。
2023-06-25 18:59:25
264
原创 C# Http 请求接口 Get / Post
get 和 post 请求,最早被用来做浏览器与服务器之间交互HTML和表单的通讯协议,后来又被广泛的扩充到接口格式的定义上,到目前为止,get / post 请求依然应用在各大网站中,比如在用户登录时,调用 get / post 请求将用户名、密码传到服务器,由服务器进行判断,是否允许用户登录,再将结果返回给浏览器,这样就实现了登录的功能。在后期的 pc 软件开发中,get / post 请求偶尔也会用到,做为一个程序员,http 协议也是我们必须要学的知识点。
2023-06-22 14:05:26
1508
原创 C# 反射 (Reflection) 的常用功能
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。优点:1、反射提高了程序的灵活性和扩展性。2、降低耦合性,提高自适应能力。3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。
2023-06-21 15:39:33
266
原创 C# WebSocketSharp 框架的用法
WebSocketSharp 是一个 C# 实现 websocket 协议客户端和服务端,WebSocketSharp 支持RFC 6455;WebSocket客户端和服务器;消息压缩扩展;安全连接;HTTP身份验证;查询字符串,起始标题和Cookie;通过HTTP代理服务器连接;.NET Framework 3.5或更高版本(包括兼容环境,如Mono)。github 地址。
2023-06-19 14:40:41
993
原创 C# 自动更新(基于FTP)
在去年,我写了一个 C# 版本的自动更新,这个是根据配置文件 + 网站文件等组成的框架,以实现本地文件的新增、替换和删除,虽然实现了自动更新的功能,但用起来过于复杂,代码量也比较大,改起来困难,后面我就想能不能弄一个 FTP 服务器进行版本的更新。
2023-06-16 11:46:41
1754
原创 C# 让程序代码在固定的线程里运行
在平时我们的开发中,多线程也是用的非常多的,尤其是做上位机行业的,平时更是必不可少,在以前我从事 Unity3d 开发时,并不用关心线程的问题,在 Unity 中的脚本代码基本都是单线程运行(协程除外),而且还可以保持比较高的运行速度,当然,这不是本次要讨论的话题。有人可能会问我这么做的意义,系统自动分配线程不是更好么?当然好,只是有时候调用其他的一些框架,就避免不了需要锁定线程。
2023-06-10 16:54:34
444
原创 C# Winform 多个程序之间的通信(非Scoket)
C# Winfrom程序之间通讯_c# sendmessege copydatastruct 返回多个值_在之前我写过 winform 程序与程序之间的通信,但是这个版本有个问题,那就是只能由两个程序进行通信,同时打开多个程序的话,接收方收到的数据就会一模一样,这次发表这个教程,也就是要解决这个问题。归根结底,还是FindWindow这个函数的用法没用对,下面是对应的解释:函数获得一个顶层窗体的句柄,该窗体的类名和窗体名与给定的字符串相匹配。这个函数不查找子窗体。
2023-06-10 16:02:42
1351
原创 C# 事件(event)
事件是一种特殊的多播委托,仅可以从声明事件的类(或派生类)或结构(发布服务器类)中对其进行调用。如果其他类或结构订阅该事件,则在发布服务器类引发该事件时,将调用其事件处理程序方法可以将事件标记为publicprivateprotectedinternal或。这些访问修饰符定义该类的用户访问该事件的方式。事件在我们平时开发中用的还是比较多的,大部分时候用在框架中,比如 Winform 中的 Timer 组件,如下面代码,Timer.Elapsed 就是一个事件//实例化Timer类,
2023-05-30 15:25:59
1294
1
原创 C# 队列(Queue)
表示对象的先进先出集合。队列和其他的数据结构一样,是一种存储容器,它遵循的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Queue 内部的元素自动删除,其实 队列 和 栈 使用方法和特点大致差不多,只是取出数据的顺序会有些不一样。
2023-05-26 19:10:13
5435
1
原创 C# 栈(Stack)
栈表示对象的简单后进先出 (LIFO) 非泛型集合。Stack 和 List 一样是一种储存容器,它遵循先进后出的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Stack 内部的元素自动删除。
2023-05-26 10:46:43
1642
1
原创 C# FluentFTP v46.0.2 文档三
FluentFTP是一个完全管理的FTP客户端,它被设计为易于使用和易于扩展。它支持文件和目录列表,上传和下载文件以及SSL/TLS连接。它可以连接到基于Unix和Windows/IIS的FTP服务器。这个项目完全是用托管的C#开发的。所有的功劳都归于J.P. Trosclair,他开发并维护这个库直到2016年。FluentFTP是在MIT许可下发布的,所以它既可以用于专有的也可以用于自由/开源的应用程序。
2023-04-18 17:23:25
325
原创 C# FluentFTP v46.0.2 文档二
FluentFTP是一个完全管理的FTP客户端,它被设计为易于使用和易于扩展。它支持文件和目录列表,上传和下载文件以及SSL/TLS连接。它可以连接到基于Unix和Windows/IIS的FTP服务器。这个项目完全是用托管的C#开发的。所有的功劳都归于J.P. Trosclair,他开发并维护这个库直到2016年。FluentFTP是在MIT许可下发布的,所以它既可以用于专有的也可以用于自由/开源的应用程序。
2023-04-18 17:10:45
233
原创 C# FluentFTP v46.0.2 文档一
FluentFTP是一个完全管理的FTP客户端,它被设计为易于使用和易于扩展。它支持文件和目录列表,上传和下载文件以及SSL/TLS连接。它可以连接到基于Unix和Windows/IIS的FTP服务器。这个项目完全是用托管的C#开发的。所有的功劳都归于J.P. Trosclair,他开发并维护这个库直到2016年。FluentFTP是在MIT许可下发布的,所以它既可以用于专有的也可以用于自由/开源的应用程序。
2023-04-18 16:55:15
377
1
C# 模拟 Unity3d 协程(防标题过短)
2023-07-31
C# 定时器封装版(防标题过短)
2023-07-31
C# 定时器改进版(防标题过短)
2023-07-31
C# Http 请求接口 Get / Post
2023-06-21
C# Winform WPF 自动更新(基于FTP)
2023-06-15
C# Winform 多个程序之间的通信(非Scoket)
2023-06-10
CefSharp 框架,封装完整
2023-05-13
Unity 连接 MySql 显示表格(Simple TableUI)
2023-03-13
Unity UI 框架(简单易懂)
2023-02-21
Unity UGUI 滚动列表
2023-02-14
C# Winform 三层架构
2022-12-20
C# Winform WPF 热更新 基于ECSharp框架
2022-10-30
Winfrom WPF等 软件自动更新解决方案
2022-10-21
C# WebSocket(Fleck) 客户端html Winfrom
2022-10-08
C# Winfrom 右键菜单
2022-07-13
C# Winfrom Chart控件 柱状图、折线图
2022-06-29
C# Winform 自定义进度条ProgressBar
2022-06-23
C# Winform 相册功能,图片缩放,拖拽,预览图分页
2022-06-21
C# Winform SplitContainer组件创建侧边菜单
2022-06-17
C# SQLite 增、删、改、查、创建加密数据库 Demo
2022-06-13
C# Winform用线程写入txt文件,并更新UI和进度
2022-05-09
WPF LiveCharts动态曲线(折线图)
2022-05-05
System.Windows.Forms.DataVisualization Demo案例
2022-04-27
NetDimension.NanUI.AssemblyResourceHandler.0.7.4.zip
2021-04-29
Visual Studio 2022 每次打开都要提示登录,这个要怎么解决
2022-05-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人