自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 Visual Studio常用的快捷键

本文总结了Visual Studio 2019的常用快捷键,涵盖核心编辑、调试、导航、重构和窗口操作五大类。编辑类包括复制/粘贴(Ctrl+C/V)、注释(Ctrl+K+C/U)等;调试类包含断点(F9)、单步调试(F10/F11)等;导航类提供跳转定义(F12)、搜索(Ctrl+T)等功能;重构类支持重命名(Ctrl+R+R)、提取方法(Ctrl+R+M)等操作;窗口类可管理资源管理器(Ctrl+Alt+L)等工具窗口。文章还介绍了多光标编辑、代码片段等实用技巧,帮助开发者显著提升编码效率。

2025-11-21 14:52:38 903

原创 【超详细】C#自定义工具类-ReflectionHelper反射助手类

本文介绍了一个功能全面的C#反射工具类ReflectionHelper,它封装了反射操作的七大核心功能:1)常量提取:支持获取静态常量和字符串常量;2)嵌套类处理:可获取嵌套类及其字段;3)属性和字段操作:支持读写公共/私有成员;4)方法调用:可调用公共/私有、实例/静态方法;5)实例创建:支持普通类和泛型类的实例化;6)特性解析:可获取类型和属性上的自定义特性;7)程序集处理:支持从程序集中加载类型和查找接口实现。该工具类简化了复杂的反射操作,适用于插件开发、依赖注入等需要动态处理类型的场景。

2025-11-13 15:53:25 749

原创 【一文了解】C#反射

本文介绍了C#中反射机制的核心概念与应用。反射允许程序运行时动态获取类型信息并操作成员,包括获取Type对象、创建实例、访问字段/属性/方法等操作。文章详细讲解了反射的核心类(Type、Assembly等)、基本用法(3种获取Type方式)、高级特性(BindingFlags、泛型反射、特性反射)以及优缺点。反射虽然存在性能开销,但在序列化、依赖注入、插件系统等场景中具有重要作用。最后强调应合理使用反射,必要时通过缓存提升性能。

2025-11-13 11:35:16 977

原创 C#中DateTime的格式符

本文介绍了C#中DateTime格式符的使用方法,分为预定义格式和自定义格式两类。预定义格式提供快捷常用选项(如d、D、s等),自定义格式则通过组合单个格式符(yyyy、MM、HH等)实现灵活控制,包括年、月、日、时、分、秒等组件的精准定义。还介绍了分隔符、AM/PM标识、时区标识等辅助符号的使用。两种方案分别适用于快速复用和精确控制的场景,开发者可根据需求选择。

2025-11-12 15:24:00 544

原创 【超详细】八大排序总结

本文总结了十大经典排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、基数排序和桶排序。文章详细介绍了每种算法的核心逻辑、时间/空间复杂度、稳定性及适用场景,并提供了C#实现的完整测试代码。测试结果验证了各算法的正确性,帮助开发者根据数据特性和需求选择合适的排序方法,如小规模数据用插入排序、大规模数据用快速排序、整数排序用计数排序等。

2025-11-03 16:11:39 1063

原创 【一文了解】八大排序-计数排序

本文介绍了三种非比较型排序算法:计数排序、基数排序和桶排序。计数排序通过统计元素出现次数实现排序,适合小范围整数;基数排序按位排序实现多位数排序;桶排序通过分桶和桶内排序处理均匀分布数据。三者均能突破O(nlogn)时间下限,但各有适用场景:计数排序适合小范围整数(如成绩排序),基数排序适合多位数(如手机号),桶排序适合均匀分布数据(如随机浮点数)。文章详细阐述了各算法的核心逻辑、复杂度、稳定性及代码实现,并通过实例分析帮助理解。总结对比了三者的差异,指导读者根据数据类型选择合适的算法。

2025-11-03 15:30:32 825

原创 【一文了解】八大排序-堆排序

本文详细介绍了堆排序算法,包括堆的定义、存储方式、基本操作及应用场景。堆是一种完全二叉树结构,通过大顶堆(父节点≥子节点)或小顶堆(父节点≤子节点)维护最值特性。堆排序的核心步骤为:构建堆(O(n))、反复提取堆顶元素并调整堆(O(nlogn)),最终时间复杂度为O(nlogn),空间复杂度O(1)。文章通过实例演示了堆排序过程,并提供了递归和非递归的C#实现代码。堆排序适用于大规模数据排序和TopK问题,但不稳定且缓存不友好。

2025-10-30 11:14:12 753

原创 【一文了解】八大排序-归并排序、快速排序

本文对比分析了归并排序和快速排序两种典型分治排序算法。归并排序采用"分治合"策略,时间复杂度稳定为O(nlogn),空间复杂度O(n),具有稳定性,适合大规模数据排序;快速排序通过基准值分区,平均时间复杂度O(nlogn)但最坏情况O(n²),空间复杂度O(logn),效率较高但不稳定。文章详细阐述了两种算法的核心逻辑、实现步骤(含代码示例)、复杂度分析及应用场景,指出归并排序适合稳定排序需求,快速排序则更适用于内存有限且不要求稳定性的场景。通过实例演示和参数对比,全面展现了两种排序算法

2025-10-30 10:15:03 848

原创 【一文了解】八大排序-插入排序、希尔排序

本文详细介绍了两种插入类排序算法:插入排序和希尔排序。插入排序通过逐个将元素插入已排序部分的正确位置实现排序,时间复杂度为O(n²)(最坏/平均)和O(n)(最优),适合小规模或部分有序数据。希尔排序是插入排序的改进版本,采用分组插入策略逐步缩小增量,平均时间复杂度提升至O(n^1.3),适用于中等规模数据。文章从核心逻辑、复杂度分析、稳定性、适用场景等方面对两种算法进行了对比,并通过具体示例和代码实现展示了算法的执行过程。测试结果表明,希尔排序在处理中等规模数据时效率明显优于基础插入排序。

2025-10-24 17:04:14 769

原创 【一文了解】八大排序-冒泡排序、选择排序

本文介绍了冒泡排序和选择排序两种基本排序算法。冒泡排序通过相邻元素比较交换将最大值"冒泡"到末尾,时间复杂度最优O(n)最差O(n²),空间复杂度O(1),是稳定排序;选择排序则通过每轮寻找最值元素交换到已排序末尾,时间复杂度始终O(n²),空间复杂度O(1),是不稳定排序。文章详细分析了两种算法的核心逻辑、适用场景、复杂度特点,并通过实例演示了排序过程,最后给出了C#代码实现和测试案例。两种算法都适合小规模数据排序,冒泡排序对近乎有序数据更高效,选择排序则交换次数更少。

2025-10-24 15:41:29 1002

原创 【超详细】C#自定义工具类-StringHelper

本文介绍了StringHelper工具类,封装了多种字符串处理功能。主要包括:1)基础方法如空值判断;2)安全字符串截取与分割;3)类型转换与格式处理;4)正则验证与字符过滤;5)数据脱敏功能;6)大小写转换;7)Unity文本样式处理。该工具类通过扩展方法实现,提供了安全、便捷的字符串操作方案,如防越界截取、格式验证、敏感信息隐藏等,能有效提升开发效率和代码安全性。文章还展示了完整代码实现和测试用例。

2025-10-17 16:08:12 1104

原创 【一文了解】正则表达式

本文系统介绍了正则表达式的核心概念与应用。主要内容包括:1)正则的本质是将自然语言匹配规则转化为符号代码;2)三大核心功能(验证、提取、替换)及典型案例;3)组成要素"原子"和"量词"的详细分类说明;4)使用原则(定位优先、转义必要、量词跟随);5)常用场景模板(手机号、邮箱、密码强度等)。通过原子与量词的组合,正则能用简洁模式替代复杂代码逻辑,是处理文本规则的强大工具。文章提供了从基础概念到实际应用的系统指导。

2025-10-17 15:00:06 1220

原创 【超详细】C#自定义工具类-FileHelper文件工具类

本文介绍了FileHelper工具类,主要功能包括:1)路径获取功能,支持获取StreamingAssets和PersistentDataPath目录路径;2)文本/二进制文件读写,包含自动创建目录和异常处理;3)JSON文件序列化/反序列化;4)CSV文件处理,支持特殊字符转义;5)基础文件管理功能(检查/删除/复制/移动文件)。所有方法都包含错误处理机制,通过Debug输出错误信息。该类采用C#编写,适用于Unity环境下的各种文件操作需求,能有效简化开发中的文件处理工作。

2025-09-26 10:23:18 1326

原创 【一文了解】C#的UriComponents枚举

本文介绍了C#中的UriComponents枚举,它用于从Uri对象中提取特定部分的信息。该枚举包含多种成员,如Scheme(协议)、Host(主机名)、Query(查询字符串)等,可精确获取URI的不同组成部分。通过示例代码展示了如何解析完整URI,并提取其中的协议、路径、参数等元素。UriComponents枚举能有效避免手动字符串处理的错误,特别适用于网络编程、URL解析等场景,使代码更简洁可靠。

2025-09-26 09:52:57 894

原创 【一文了解】C#的StringSplitOptions枚举

本文介绍了C#中的StringSplitOptions枚举,它用于控制字符串分割时的行为。该枚举包含三种选项:None(保留所有分割结果)、RemoveEmptyEntries(移除空字符串)和TrimEntries(修剪空白并移除空值)。文章通过示例对比了三种选项的区别,并给出了常见使用场景,如处理用户输入、解析配置文件和读取CSV文件。最后提醒TrimEntries仅支持.NET5+版本,并强调合理选择选项能让代码更简洁高效。

2025-09-25 16:46:16 611

原创 【一文了解】C#的StringComparison枚举

C#中的StringComparison枚举详解 StringComparison枚举用于精确控制字符串比较行为,主要分为文化敏感比较(CurrentCulture/InvariantCulture)和序号比较(Ordinal系列)两大类。其中,OrdinalIgnoreCase最常用,适合文件路径、URL等忽略大小写的场景,具有高性能和跨系统一致性优势。开发建议:程序内部逻辑优先使用Ordinal系列比较,仅面向用户的场景才考虑文化敏感比较,避免依赖默认比较规则可能导致的跨系统不一致问题。

2025-09-25 16:08:31 824

原创 【一文了解】Directory类和File类

本文介绍了C#中System.IO命名空间下的Directory和File类,这两个静态类分别用于目录和文件操作。Directory类提供创建、删除、查询目录等方法,如CreateDirectory、Delete、Exists等;File类则提供文件的读写、复制、移动等方法,如WriteAllText、ReadAllBytes、Copy等。在Unity开发中,建议使用Application.persistentDataPath等跨平台路径,并注意WebGL和移动端的平台限制。

2025-09-24 14:18:04 918

原创 C#和Unity文件操作中常用的枚举

本文介绍了C#和Unity中文件操作常用的枚举类型。主要包括:FileMode(控制文件打开/创建方式)、FileAccess(设置读写权限)、FileShare(管理文件共享权限)、SearchOption(选择搜索范围)、FileAttributes(定义文件属性)以及Unity特有的路径属性(如persistentDataPath)。这些枚举是文件操作的核心控制参数,合理组合使用可以满足不同场景下的文件处理需求,如创建、读取、修改文件,以及多进程共享文件等。

2025-09-24 14:10:28 927

原创 【一文了解】FileStream、StreamWriter、StreamReader

摘要:本文对比了C#中三种文件I/O类:FileStream处理底层字节流,适用于二进制文件或精确控制;StreamWriter/StreamReader作为文本专用工具,分别用于写入和读取字符串。FileStream是基础工具,后两者依赖它实现文本编码转换。文本操作优先使用StreamWriter/StreamReader,二进制操作必须用FileStream。文章通过代码示例展示了三种类的典型用法,并提供了选择建议:文本文件用专用类简化编码处理,二进制或复杂操作需用底层FileStream。

2025-09-24 11:28:01 706

原创 【超详细】using语句

C#中的using语句是处理文件写入等资源操作的关键语法,其核心作用是自动释放资源以避免文件锁定或内存泄漏。文章详细介绍了using的两种语法格式(基础格式和嵌套格式),并强调了其在文本/二进制文件写入、大文件处理等场景中的应用。关键注意事项包括:必须实现IDisposable接口、作用域限制、缩进规范、异常处理配合等。与简化方法相比,using+流对象方案更灵活,适合复杂操作。

2025-09-24 10:26:28 858

原创 【一文了解】闭包

本文介绍了C#和Unity中闭包的概念和应用。闭包是匿名函数捕获外部作用域变量的现象,编译器会生成匿名类实现这一机制。重点讨论了多线程与循环结合时闭包的典型问题,即共享循环变量导致的值混乱,并提出了"变量快照"解决方案——在每轮循环中创建临时变量来捕获当前值。此外还探讨了闭包与协程结合时的延迟修改问题,以及闭包可能导致的内存泄漏风险。最后总结了闭包使用技巧:合理使用临时变量、注意内存管理、简化调试方法等。正确理解闭包原理有助于避免常见陷阱,提升代码质量。

2025-09-19 17:01:13 902

原创 【一文了解】线程的使用

本文介绍了C#中线程的使用方法,包括基础语法、核心操作及Unity中的特殊注意事项。主要内容有:1)创建线程的3种方式(无参数方法、带参数方法、Lambda表达式);2)线程的核心操作(等待、休眠、终止);3)Unity中禁止子线程调用UnityAPI,需通过主线程调度器安全更新UI;4)线程适用于不涉及UnityAPI的耗时任务,使用时需注意线程安全和API调用限制。文章还提供了主线程调度器的实现代码示例。

2025-09-19 16:06:04 1178

原创 区分同步(Synchronous)和异步(Asynchronous)

本文对比了Unity和C#中的同步与异步编程模式。同步是顺序执行代码,会阻塞当前线程;异步则允许非阻塞执行,通过协程或线程实现。协程适合主线程内的轻量级异步任务,如分帧加载;线程适合耗时操作,但需注意线程安全。文章详细介绍了两种模式的原理、使用场景和关键区别,并提供了代码示例。选择方案时,应根据任务类型权衡:简单逻辑用同步,Unity相关异步用协程,独立耗时任务用线程。合理组合使用可提升程序性能和响应性。

2025-09-18 15:50:33 1064

原创 区分进程(Process)、线程(Thread)和协程(Coroutine)

本文对比了线程、进程和协程在Unity/C#开发中的核心区别:进程是独立运行实例,拥有独立资源但开销大;线程是进程内的执行单元,可并行处理CPU/IO密集型任务但需注意线程安全;协程是单线程内的协作任务,通过yield实现分步执行,适合延迟/分帧操作。Unity中主线程负责核心逻辑,子线程不能调用UnityAPI,协程则可以直接交互。实际开发中推荐协程处理游戏逻辑,子线程处理数据任务。

2025-09-18 15:38:13 556

原创 【超详细】C#的单例模式

本文详细介绍了C#中的单例设计模式,包括两种实现方式:普通类泛型单例(Singleton<T>)和基于MonoBehaviour的组件单例(MonoSingleton<T>)。单例模式通过私有构造、静态私有实例和公共访问入口确保全局唯一实例,具有节省资源、保证数据一致性等优势。文章分别阐述了两者的核心原理、代码实现、使用场景及注意事项,并提供了日志管理器和音效管理器的具体应用示例。特别强调了多线程安全、初始化时机和避免过度使用等重要原则,为Unity开发中合理运用单例模式提供了全面指导。

2025-09-16 19:30:00 1182

原创 【一文了解】Unity的协程(Coroutine)与线程(Thread)

Unity协程与线程都是实现异步操作的重要方式,但机制不同。协程运行在主线程,通过yield return分步执行,适合延迟操作、分帧处理等轻量任务,简单安全但无法真正并行。线程由系统调度,可多核并行,适合CPU/IO密集型任务,但需处理线程同步问题,复杂度高。Unity中协程不能直接访问线程API,线程不能操作Unity对象,需通过主线程调度器更新UI。根据任务类型选择合适方案:简单异步用协程,重计算用线程,二者可结合使用。

2025-09-16 17:27:44 1085

原创 C#强制类型转换(显示转换)和安全类型转换

本文详细介绍了C#中的两种类型转换方式:强制类型转换(显式转换)和安全类型转换(as/is关键字)。强制转换通过(T)obj语法直接转换,适用于确定兼容的场景,但失败会抛出异常。安全转换中,as关键字尝试转换失败返回null,适用于引用类型和可空值类型;is关键字先判断兼容性再转换,支持所有类型且更安全。文章对比了两种方式的特性、适用场景和性能差异,建议优先使用is模式匹配,其次as,最后强制转换。同时指出了常见错误如非可空值类型用as转换、强制转换父类实例为子类等,并提供了正确的处理方法。

2025-09-04 18:30:00 912

原创 【一文了解】C#泛型

【摘要】泛型是C#中实现代码复用和类型安全的重要特性,通过类型参数化(如<T>)定义通用逻辑。主要内容包括:1)泛型解决了使用object导致的类型不安全问题和重复编码问题;2)类型参数命名规范(T/TKey/TValue等);3)四种泛型结构:泛型类(最常用)、方法、接口和委托;4)六种常用约束(基类、接口、值/引用类型等)确保类型安全;5)泛型优势包括编译时类型检查、避免装箱拆箱、代码复用性强。泛型显著提升了开发效率和代码质量。

2025-09-04 17:00:00 1297

原创 C#自定义工具类-时间日期工具类

本文分享了一个C#时间日期工具类DateTimeHelper,封装了日期处理的常用功能。主要包括:日期格式化(数字、日志、带星期等格式)、时间戳转换(秒级/毫秒级)、时间间隔计算(秒、毫秒、天、月)、日期边界获取(天/月开始结束时间)、时区转换(本地/UTC)、日期解析(单/多格式)、时间比较(相等性、先后顺序)、日期合法性校验(闰年、月末等判断)以及按精度截断时间等功能。该工具类提供了安全易用的API,简化了日常开发中对日期时间的各种操作需求。

2025-08-22 19:15:00 822

原创 C#自定义日期时间选择器

本文介绍了在Unity中实现日期时间选择器的完整方案。主要包括日期选择器和时间选择器两部分,提供了完整的代码实现,包含DatePicker、TimePicker和DateTimePicker三个核心,详细说明了如何计算日历显示范围、处理时间边界条件以及实现交互反馈。

2025-08-13 21:30:00 1025

原创 Unity、C#常用的时间处理类

本文介绍了Unity和C#开发中常用的时间处理类。Unity内置的Time类提供游戏运行时间、帧间隔和时间缩放等核心功能,包括time、deltaTime和timeScale等关键字段,System.DateTime类用于获取现实世界时间,支持日期计算和格式化输出。System.TimeSpan类表示时间间隔,可精确计算天、时、分、秒等单位。

2025-08-13 21:00:00 1102

原创 C#区分委托与事件

本篇文章来学习一下委托与事件的区别,以及它们之间的关系。委托(Delegate)是一种数据类型,可以存储方法的引用,允许通过该引用调用方法,也允许通过 += 和 -= 操作符来添加或删除方法。委托是一种数据类型,委托代表的是方法,当调用委托时就是调用了这个方法。事件(Event)是一种特殊的委托,它基于委托,是委托的封装,确保外部代码不能直接更改事件的委托列表(即确保事件不能被直接赋值或修改),只能通过订阅 += 和取消订阅 -= 来操作事件。委托是事件的基础。委托可以直接调用,而事件不能直接触发

2025-01-22 16:12:18 3614 1

原创 【超详细】C#事件

本篇文章来从事件的定义、特点、使用步骤等方面对事件进行学习。事件(event)是声明为委托类型的类的成员,允许一个类或对象通知其他类或对象某个特定的事情已经发生。事件基于委托。表示类的偶发行为,一旦这个行为发生,往往要引起其他行为/方法发自动执行。事件是用来实现两个或多个行为的联动调用的。简而言之,事件(关键字event)是声明为委托类型的类的成员变量,是一种特殊的委托。

2025-01-22 16:10:45 1465

原创 【一文了解】C#重点-委托2

本篇文章来进一步学习一下C#的委托,委托允许将方法作为参数传递给其他方法,C#中的委托类似于 C 或 C++ 中的函数指针。1.1委托的定义委托是一种数据类型(关键字delegate);委托代表的是方法;当调用委托时就是调用了这个方法。1.2委托的3个基本使用步骤1)定义委托在定义端定义委托,定义格式为delegate 返回类型 委托类型名(形参列表);2)创建实例。实例化委托的4种方法,匿名方法,lambda表达式

2024-12-31 17:32:32 1379 2

原创 Unity录屏插件-使用Recorder录制视频

本篇文章来分享一下Unity官方的录屏插件Recorder的简单使用。Recorder允许用户在运行时或编辑模式下录制游戏或应用的内容。录制Game View视频,录制360 View全景视频

2024-12-19 19:02:49 6248 4

原创 【一文了解】C#重点-委托1

本篇文章来学习一下C#的委托,委托是C#中的一个重要概念,它允许将方法作为参数传递给其他方法。委托(delegate)是方法的代理/代表,委托的是方法,当调用委托时就是调用了这个方法。是方法的引用,是一种数据类型。委托代表【代理/表示】的是方法【代表和委托签名一致的任何方法,签名:返回类型和参数组成】、【委托是一类行为的抽象】委托的签名是指它所引用的方法的签名。委托签名包括方法的返回类型和参数类型,而不包括委托本身的名称或其他修饰符。因此,尽管方法名称相同,但它们的签名不同,所以是不同的方法。

2024-12-19 19:01:19 1111

原创 Visual Studio开发插件【通译灵码】与Visual Studio快捷键

本篇文章来分享一款免费的Visual Studio插件-通译灵码,以及Visual Studio常用的快捷键,通过这些,可以使开发更高效。通译灵码具有提示功能和问答功能。Ctrl+RR:按住Ctrl,摁两次R,可对选中变量进行重命名F5:启动调试F5+shift:停止调试F10:逐过程执行F11:逐语句执行Ctrl+K+F:自动对齐Ctrl+K+C:注释选中的代码Ctrl+K+U:取消注释Ctrl+R+M:提取方法,重构,增强代码的可读性自动属性快捷键:输入prop

2024-12-06 21:00:00 2266

原创 【一文了解】C#基础-接口

本篇文章来分享一下C#的接口。从接口的定义、特点与规则、接口的实现、接口与继承的比较、接口与抽象类的比较等来详细学习接口。在C#中,接口(interface)是用来定义类或结构(struct)所实现的一组公共行为的抽象。接口本质上定义了行为规范,但不实现行为。接口是规范,定义一组对外的行为规范,要求它的实现类必须实现接口的所有成员。

2024-12-06 20:30:00 1613

原创 【超详细】C#基础-面向对象三大特性:多态

今天来详细学习一下C#面向对象的三大特性:多态。多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许对象以不同的方式表现出不同的行为。通过多态,子类可以在继承父类的方法时,修改或扩展父类的行为,甚至在运行时决定调用哪个类的方法,这使得程序更加灵活和可扩展。多态有两种主要形式:1)编译时多态(静态多态):主要通过方法重载和方法隐藏来实现。2)运行时多态(动态多态):主要通过方法重写和接口实现来实现。方法重写是指子类重写父类的虚方法或抽象方法

2024-11-26 19:00:00 1839 2

原创 【超详细】C#基础-面向对象三大特性:封装、继承

今天来详细学习一下C#面向对象的三大特性:封装、继承。封装(Encapsulation) 是面向对象编程(OOP)的一个基本特性,它指的是将对象的状态(字段)和行为(方法)捆绑在一起,并通过控制访问权限来保护对象的内部状态。继承(Inheritance) 是面向对象编程(OOP)中的一个重要特性,它允许一个类从另一个类派生(继承)出新的类,从而实现代码的复用和扩展。

2024-11-26 18:00:00 1476

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除