C#
文章平均质量分 88
熊思宇
游戏程序员的进阶之旅,不断探索、创新,始终坚持对技术的热爱与执着
展开
-
C# yaml 配置文件的用法
YAML的设计目标是易于阅读和编写,同时也易于机器解析和生成。3.在 key 的值前边必须有空格,否则读取时会报错,比如:name: zhansan,而不是 name:zhangsan,键值对的冒号后面至少有一个空格。5. YAML兼容Json的语法,这意味着你在 yaml 文件也可以使用 json 语法,同样的,C# 插件 YamlDotNet 也支持 Json 的读写。YAML 在读取性能上不如 Json,但在需要手写配置文件的时候,YAML 要比 Json 方便不少,阅读起来也更加容易。原创 2024-07-22 19:06:27 · 509 阅读 · 0 评论 -
C# 程序集的加载和卸载
AppDomain(应用程序域)在C#和.NET框架中是一个非常重要的概念,它提供了一种隔离应用程序中运行的不同部分的方式。提到程序集的加载和卸载,不得不提到 AppDomain 对应的概念,AppDomain 在使用上,.NetFramework 和 .Net 、 .Net Core 用法也不太一样,下面是 AppDomain 的一些简介。虽然AppDomain本身不直接提供并行执行的能力,但通过使用多个AppDomain,可以并行地运行应用程序的不同部分,从而利用多核处理器的优势。原创 2024-07-15 15:15:38 · 936 阅读 · 0 评论 -
C# 时间计算(二)
在 C# 中,DateTime 用于处理日期和时间的内置类,其值范围为 00:00:00 (午夜) , 0001年1月1日,安诺·多米尼 (公历) 年12月31日晚上11:59:59 (公历 )。时间值以 100 纳秒为单位进行测量,称为刻度。特定日期是自 A.0001 年 1 月 1 日午夜 12:00 以来的时钟周期数, (日历中的 GregorianCalendar C.E.)。该数字不包括按闰秒添加的刻度。原创 2023-11-24 21:00:42 · 2650 阅读 · 0 评论 -
C# Windows 服务程序的开发
安装程序将服务的可执行文件注册到系统服务管理器中,并提供安装、卸载和配置服务的功能。在这个类中,需要重写 OnStart 和 OnStop 方法,分别用于处理服务的启动和停止逻辑。通过使用 .NET 提供的相关类和方法,可以轻松地创建、安装、启动和停止 Windows 服务。Windows 服务是一种特殊类型的应用程序,它可以在操作系统启动时自动启动,并在后台持续运行,而无需用户交互。这里重写了一个 OnStart 和 OnStop 方法,意思是程序启动的时候执行一次,和程序关闭的时候执行一次。原创 2023-12-23 16:32:45 · 2698 阅读 · 2 评论 -
C# 时间计算(一)
在 C# 中,DateTime 用于处理日期和时间的内置类,其值范围为 00:00:00 (午夜) , 0001年1月1日,安诺·多米尼 (公历) 年12月31日晚上11:59:59 (公历 )。时间值以 100 纳秒为单位进行测量,称为刻度。特定日期是自 A.0001 年 1 月 1 日午夜 12:00 以来的时钟周期数, (日历中的 GregorianCalendar C.E.)。该数字不包括按闰秒添加的刻度。原创 2023-11-24 16:53:05 · 2007 阅读 · 0 评论 -
C# 读写ini文件
ini 文件是Initialization File的缩写,即初始化文件,是 windows 的系统配置文件所采用的存储格式,统管 windows 的各项配置,一般用户就用 windows 提供的各项图形化管理界面就可实现相同的配置了。但在某些情况,还是要直接编辑 .ini 才方便,一般只有很熟悉 windows 才能去直接编辑。开始时用于 Win3.X下面,Win95 用注册表代替,以及后面的内容表示一个节,相当于注册表中的键。原创 2021-12-02 14:08:58 · 7582 阅读 · 0 评论 -
C# XmlHelper
一、需求对于小量数据在本地存储,可能会用到 xml 文件,下面的 xmlhelper.cs 代码出处好像是微软的,不太清楚,百度搜的很多帖子只是贴出了 xmlhelper 代码,千篇一律,全是贴了代码就什么都没有了,在此我将 xmlhelper 常用的 增、删、改、查 做一个教程。二、XmlHelperusing System;using System.Collections;using System.Data;using System.IO;using System.Te....原创 2021-03-01 16:28:42 · 3048 阅读 · 4 评论 -
C# XmlHelper 精简版
在之前,我也写过XML相关的帖子,比如使用微软自带的System.Xml 如何去创建文件和节点等,还有一个封装好的 XmlHelper,有兴趣的可以去看看。C# 创建并写入XML文件。原创 2022-03-18 17:32:15 · 1525 阅读 · 0 评论 -
C# 读写自定义的Config文件
在软件开发中,经常用到设置这样的功能,如果设置中的功能不多,用 Json、XML 这样的数据结构存储非常的麻烦,一个字段的读写,就要写大量的代码,例如 Json 要写实体类才能进行读写,假设其中一个功能不用,这个字段所有相关的引用都要进行删除和修改,使用 ini 这样的方式,现在几乎没几个人用了,于是我决定用微软自带的Config文件方式。于是搜索了一下自定义Config文件,发现网上大部分帖子都是读写 “软件名.exe.config” 文件,没什么用,和我设计需求不符合,于是我自己写了一个。...原创 2022-06-30 22:59:55 · 6148 阅读 · 2 评论 -
C# IO 相关功能整合
IO 相关功能整合原创 2023-07-28 16:15:14 · 689 阅读 · 0 评论 -
C# 线程基础(二)
1.lock 只对多线程有效,对单线程无效,单线程 lock 不会导致死锁。2.不推荐使用 lock(this),因为在它外部也可以访问它。3.不应该使用 lock(string(类型)),因为 string 在内存分配上是重用的,可能会导致冲突。4.lock 中包含的代码最好不要太多,因为在这里是单线程运行的。5. .net 提供了一些线程安全的集合类,使用这些集合不需要用到 lock。6.在可以使用数据分拆的方法来使用多线程时,最好使用数据分拆而不使用 lock。原创 2023-06-26 16:07:02 · 424 阅读 · 0 评论 -
C# List 文档(七)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。原创 2023-07-21 14:14:51 · 709 阅读 · 2 评论 -
C# List 文档(六)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。原创 2023-07-21 10:00:21 · 389 阅读 · 0 评论 -
C# List 文档(五)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。原创 2023-07-21 09:54:38 · 624 阅读 · 0 评论 -
C# List 文档(四)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。原创 2023-07-21 09:52:30 · 370 阅读 · 0 评论 -
C# List 文档(三)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。原创 2023-07-21 09:50:55 · 760 阅读 · 0 评论 -
C# List 文档(二)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。原创 2023-07-21 09:45:42 · 654 阅读 · 0 评论 -
C# List 文档(一)
表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法,List是一个动态数组,它可以存储任意类型的对象,并且可以根据需要自动调整大小。原创 2023-07-21 09:37:31 · 1027 阅读 · 0 评论 -
C# Linq 文档(三)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。原创 2023-07-14 12:12:20 · 2022 阅读 · 0 评论 -
C# Linq 文档(二)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。原创 2023-07-13 17:28:39 · 1262 阅读 · 0 评论 -
C# Linq 文档(四)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。原创 2023-07-14 12:13:02 · 1918 阅读 · 0 评论 -
C# Linq 文档(一)
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持。此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库、XML 文档、各种 Web 服务等。借助 LINQ,查询成为了最高级的语言构造,就像类、方法和事件一样。对于编写查询的开发者来说,LINQ 最明显的“语言集成”部分就是查询表达式。查询表达式采用声明性查询语法编写而成。原创 2023-07-13 17:16:01 · 1508 阅读 · 0 评论 -
C# IEnumerator 用法
IEnumerator 是所有非泛型枚举器的基接口。其泛型等效项是 System.Collections.Generic.IEnumerator 接口。C# 语言的 foreach 语句(在 Visual Basic 中为 for each)隐藏了枚举数的复杂性。因此,建议使用 foreach 而不是直接操作枚举器。枚举器可用于读取集合中的数据,但不能用于修改基础集合。方法 Reset 为实现 COM 互操作性而提供,不需要完全实现;原创 2023-07-15 16:06:25 · 2516 阅读 · 0 评论 -
C# 线程基础(一)
线程(Thread)是进程中的基本执行单元,是操作系统分配CPU时间的基本单位,一个进程可以包含若干个线程,在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。线程主要是由CPU寄存器、调用栈和线程本地存储器(Thread Local Storage,TLS)组成的。CPU寄存器主要记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。原创 2023-06-25 18:59:25 · 957 阅读 · 0 评论 -
C# WebSocketSharp 框架的用法
WebSocketSharp 是一个 C# 实现 websocket 协议客户端和服务端,WebSocketSharp 支持RFC 6455;WebSocket客户端和服务器;消息压缩扩展;安全连接;HTTP身份验证;查询字符串,起始标题和Cookie;通过HTTP代理服务器连接;.NET Framework 3.5或更高版本(包括兼容环境,如Mono)。github 地址。原创 2023-06-19 14:40:41 · 2025 阅读 · 0 评论 -
C# 在控制台整齐的输出 DataTable
在Winform 平台,可以用 DataGridView 这样的控件来显示数据库的表单数据,但在 C# 控制台项目中,如果有用到数据库查询,我们想看看查询语句的效果,就比较困难了,比如,我随意写了一个控制台输出,代码如下:原创 2023-07-04 14:26:01 · 1838 阅读 · 0 评论 -
C# ref / out 用法
在C#中,ref和out关键字用于参数传递的方式。它们允许在方法内部对参数进行修改,并将修改后的值带回到调用方法中。ref关键字用于传递引用类型的参数。当使用ref关键字传递参数时,方法内部对参数的任何修改都会影响到调用方法中的原始变量。out 关键字主要用于传递值类型的参数,并且要求在方法内部对参数进行赋值。与ref不同,使用out关键字传递参数时,不需要在调用方法之前对参数进行初始化。原创 2023-06-29 11:32:05 · 3130 阅读 · 0 评论 -
C# params 可变参数
params 关键字用于定义一个方法的可变参数列表。它允许方法接受任意数量的参数,而不需要事先指定参数的数量。使用 params 关键字,可以更灵活地调用方法,而不必为每个不同数量的参数编写多个方法重载。要使用 params 关键字,需要在方法的参数列表中将可变参数标记为 params 关键字。这个参数必须是一个数组类型,并且必须是方法参数列表的最后一个参数。当调用方法时,可以传递任意数量的参数,它们将被封装为一个数组,并作为 params 参数传递给方法。原创 2023-06-29 15:41:52 · 594 阅读 · 0 评论 -
C# Http 请求接口 Get / Post
get 和 post 请求,最早被用来做浏览器与服务器之间交互HTML和表单的通讯协议,后来又被广泛的扩充到接口格式的定义上,到目前为止,get / post 请求依然应用在各大网站中,比如在用户登录时,调用 get / post 请求将用户名、密码传到服务器,由服务器进行判断,是否允许用户登录,再将结果返回给浏览器,这样就实现了登录的功能。在后期的 pc 软件开发中,get / post 请求偶尔也会用到,做为一个程序员,http 协议也是我们必须要学的知识点。原创 2023-06-22 14:05:26 · 16555 阅读 · 7 评论 -
C# 让程序代码在固定的线程里运行
在平时我们的开发中,多线程也是用的非常多的,尤其是做上位机行业的,平时更是必不可少,在以前我从事 Unity3d 开发时,并不用关心线程的问题,在 Unity 中的脚本代码基本都是单线程运行(协程除外),而且还可以保持比较高的运行速度,当然,这不是本次要讨论的话题。有人可能会问我这么做的意义,系统自动分配线程不是更好么?当然好,只是有时候调用其他的一些框架,就避免不了需要锁定线程。原创 2023-06-10 16:54:34 · 1055 阅读 · 0 评论 -
C# 反射 (Reflection) 的常用功能
反射指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。优点:1、反射提高了程序的灵活性和扩展性。2、降低耦合性,提高自适应能力。3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。原创 2023-06-21 15:39:33 · 1950 阅读 · 0 评论 -
C# 事件(event)
事件是一种特殊的多播委托,仅可以从声明事件的类(或派生类)或结构(发布服务器类)中对其进行调用。如果其他类或结构订阅该事件,则在发布服务器类引发该事件时,将调用其事件处理程序方法可以将事件标记为publicprivateprotectedinternal或。这些访问修饰符定义该类的用户访问该事件的方式。事件在我们平时开发中用的还是比较多的,大部分时候用在框架中,比如 Winform 中的 Timer 组件,如下面代码,Timer.Elapsed 就是一个事件//实例化Timer类,原创 2023-05-30 15:25:59 · 5529 阅读 · 1 评论 -
C# 队列(Queue)
表示对象的先进先出集合。队列和其他的数据结构一样,是一种存储容器,它遵循的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Queue 内部的元素自动删除,其实 队列 和 栈 使用方法和特点大致差不多,只是取出数据的顺序会有些不一样。原创 2023-05-26 19:10:13 · 16113 阅读 · 1 评论 -
C# 栈(Stack)
栈表示对象的简单后进先出 (LIFO) 非泛型集合。Stack 和 List 一样是一种储存容器,它遵循先进后出的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Stack 内部的元素自动删除。原创 2023-05-26 10:46:43 · 5387 阅读 · 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:10:45 · 656 阅读 · 0 评论 -
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 · 946 阅读 · 1 评论 -
C# Lambda表达式和委托
"Lambda表达式"是一个,是一种高效的类似于函数式编程的表达式,Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。原创 2023-04-10 15:13:51 · 1775 阅读 · 0 评论 -
C# 框架入口功能的实现
大部分框架初始化时,必须要向框架入口传入一些参数,以实现不同的功能,那么问题来了,框架入口的写法是如何实现的呢?我们就以 NanUI 这个框架作为例子,看看这个框架的启动入口,看起来就非常的优雅好看吧,其实实现这个效果也不难,而且没有那么多高级语法,那么这次就以 NanUI 框架这个启动入口来写一个类似的 Demo 出来,学习这些知识之前,你必须了解 C# 的委托,Lambda 表达式的一些基础知识,后面我也会做一些相关的介绍。原创 2023-03-31 10:49:57 · 564 阅读 · 0 评论 -
C# 泛型详解(泛型类,方法,接口,委托,约束,反射 )
泛型(Generic),是将不确定的类型预先定义下来的一种C#高级语法,我们在使用一个类,接口或者方法前,不知道用户将来传什么类型,或者我们写的类,接口或方法相同的代码可以服务不同的类型,就可以定义为泛型。这会大大简化我们的代码结构,同时让后期维护变得容易。...............原创 2022-09-01 11:49:13 · 14812 阅读 · 18 评论 -
C# 数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。它们的逻辑结构通常有:1.集合:数据结构中的元素之间除了“同属一个集合”的相互关系外,别无其他关系;2.线性结构:数据结构中的元素存在一对一的相互关系;3.树形结构:数据结构中的元素存在一对多的相互关系;4.图形结构:数据结构中的元素存在多对多的相互关系。原创 2023-02-15 16:20:52 · 5952 阅读 · 0 评论