- 博客(22)
- 收藏
- 关注
原创 C#基础篇(11)泛型类与泛型方法详解
摘要:C#泛型编程详解 本文系统介绍了C#中的泛型类和方法。泛型类通过类型参数实现代码重用,提供类型安全并优化性能,支持多类型参数、约束条件、继承和静态成员等特性。泛型方法允许定义操作多种类型的方法,包括类型推断、约束组合、递归调用等高级特性。两者都可通过反射进行动态操作。合理使用泛型可显著提升代码质量,减少重复,增强类型安全,但需注意避免过度复杂化。掌握泛型是成为高级C#开发者的关键技能。
2025-07-09 20:23:25
1058
原创 C#基础篇(10)集合类之列表
摘要:C#中的List<T>是System.Collections.Generic命名空间下的动态数组实现,提供比传统数组更灵活的功能。它能自动扩容,支持添加、删除、查询和排序等丰富操作,内部通过动态数组实现,当元素超过容量时会自动扩容(通常为2倍)。相比固定数组,List更适合元素数量变化的场景,但性能略低。关键优化点包括预分配容量和使用批量操作。开发者应根据元素是否频繁变化、性能需求等选择数组或List。理解其内部机制有助于编写高效代码。
2025-07-09 20:21:52
385
原创 C#基础篇(09)结构体(struct)与类(class)的详细区别
C#中结构体(struct)与类(class)的核心区别在于:结构体是值类型,直接存储数据,通常分配在栈上,适合小型临时对象;类是引用类型,通过指针访问堆内存,适合大型或长期存在的对象。关键差异包括内存管理方式(GC vs 栈分配)、赋值行为(复制值 vs 复制引用)、继承能力(类支持)、构造函数要求(结构体必须初始化所有字段)以及null值处理。结构体通常用于简单值类型(如坐标),而类更适合需要继承或多态的场景。设计时应考虑类型大小、语义需求(值/引用)、性能开销和生命周期管理等因素。
2025-07-09 20:21:42
812
原创 C#基础篇(06)抽象类与接口详解&区别
本文介绍了C#中抽象类和接口的核心概念与区别。抽象类介于普通类和接口之间,不能实例化但可提供部分实现,要求派生类完成抽象成员;接口则是纯契约,不支持字段但允许多继承。文章详细对比了两者的特性(如构造函数、版本控制等),并提供了实际应用示例(如模板方法模式、依赖注入)。抽象类适合构建类层次结构,接口更适合定义跨类别行为。最后总结了设计最佳实践,强调合理使用这些特性可提升代码的灵活性和可维护性。
2025-07-08 09:11:33
1080
原创 C#基础篇(08)运算符重载详解
摘要:C#运算符重载允许为自定义类型定义运算符行为。可重载的运算符包括一元、二元和比较运算符,比较运算符需成对重载。通过operator关键字定义静态方法实现重载,示例展示了复数类的加减乘运算及比较操作。需注意:必须成对重载相关运算符,重载==/!=时应同时重写Equals和GetHashCode,不能重载赋值等特定运算符。转换运算符支持隐式/显式类型转换。最佳实践强调保持操作直观性、避免滥用、确保一致性和良好文档。运算符重载能提升代码可读性,但需谨慎使用。
2025-07-08 09:11:09
402
原创 C#基础篇(07)static 关键字详解(静态类、静态成员、静态构造函数)
摘要:C#中的static关键字用于定义类、成员和方法的静态特性。静态成员(字段、方法、属性)属于类本身而非实例,所有实例共享同一份拷贝(如计数器共享)。静态类不能实例化或继承,仅包含静态成员,常用于工具类(如MathUtils)。静态构造函数用于初始化静态数据,在类首次使用前自动执行,确保线程安全和一次性初始化。主要优势包括数据共享、无实例访问、内存优化和组织工具方法。
2025-07-07 18:56:09
333
原创 C#基础篇(05)面向对象编程的三大特性(封装、继承、多态)
摘要:本文介绍了面向对象编程的三大特性。封装通过私有字段和公共属性/方法实现数据隐藏和保护;继承允许子类复用父类代码,支持单继承和构造函数调用规则;多态包括方法重载(参数不同)和方法重写(virtual/override或new关键字实现),使不同对象对同一消息做出不同响应。这些特性共同构成了面向对象编程的核心机制,提高了代码的可重用性、可维护性和灵活性。(149字)
2025-07-07 18:27:15
420
原创 Unity脚本开发篇(03)常用API(Component类、Transform类、GameObject类、Object类、Time类)
本文总结了Unity中Component、Transform和GameObject三大类的常用操作方法。Component类包含GetComponent()系列方法,用于获取单个/多个组件或子/父对象组件;Transform类提供位置/缩放设置、移动旋转和父子关系操作;GameObject类涵盖激活状态控制、组件添加/获取以及对象查找功能。此外还介绍了Object类的对象查找和销毁方法。这些API是Unity开发的基础工具,合理使用能有效提升开发效率。
2025-07-03 10:37:22
919
原创 C#基础篇(04)什么是面向对象编程?
C#的面向对象编程(OOP)以**封装、继承、多态和抽象**四大支柱为核心,通过**类与对象**组织代码,利用**构造函数、属性、方法**等构建模块化结构。高级特性包括**接口多实现、抽象类、分部类**等,遵循**SOLID设计原则**确保代码质量。C#特有的**属性语法、记录类型、扩展方法**等进一步简化开发,实现高效、可维护的OOP设计。
2025-07-03 10:36:42
321
原创 C#基础篇(03)值类型Value Types和引用类型Reference Types的区别
C#数据类型分为值类型和引用类型。值类型(int、struct、enum等)直接存储数据,赋值时复制整个值,修改不影响原值;引用类型(class、array等)存储数据地址,赋值复制引用,修改会影响原值。字符串虽是引用类型但不可变,行为类似值类型。值类型通常存于栈,引用类型存于堆。关键区别在于存储位置、赋值行为和修改影响。
2025-07-02 14:59:07
349
原创 C#基础篇(02)异常处理的详解
C#异常处理使用try-catch-finally结构捕获和处理运行时错误。常见异常包括NullReferenceException、IndexOutOfRangeException等,每种对应特定错误场景。try块包含可能出错代码,catch块按异常类型处理错误,finally块确保资源释放(如关闭文件)。多个catch块按顺序匹配异常,finally块无论是否异常都会执行。这种机制使程序能优雅处理错误而不崩溃,同时保证资源正确释放。
2025-07-02 14:58:26
382
原创 Unity脚本开发篇(02)Debug脚本使用vs2022调试(常规调试和单帧调试)的详细指南
摘要:本文介绍了在Unity中使用Visual Studio 2022进行C#脚本调试的具体流程。首先需要安装VS2022和Unity编辑器,并配置Unity项目的脚本编辑器为VS2022。调试前需确保安装UnityDebugger扩展,设置项目为Debug模式。调试步骤包括:在代码中设置断点,VS2022附加到Unity进程,使用F5/F10/F11等快捷键控制调试流程,并通过局部变量窗口和即时窗口查看变量值。文中还提到即时窗口支持临时代码修改而不会影响源代码。
2025-06-26 20:38:46
475
原创 Unity脚本开发篇(01)什么是脚本?脚本的生命周期/必然事件是什么?
尽量减少对脚本执行顺序的依赖,如果必须依赖顺序,使用Script Execution Order明确设置,考虑使用事件系统来解耦脚本间的直接调用。执行顺序不确定(可通过 [Script Execution Order] 设置)。:当游戏对象/该脚本组件被多次启用禁用时,OnDisable()也会重复调用。:当游戏对象/该脚本组件被多次启用禁用时,OnEnable()也会重复调用。让一个脚本在Awake()中调用另一个脚本的方法。在所有每帧调用 Update 执行后调用。调用(即使脚本未启用),唯一调用。
2025-06-26 15:50:41
279
原创 C#基础篇(01)一篇文章搞定C#基础语法
本文摘要:C#编程基础核心概念解析 数据类型:基本值类型(int/float等)字节数固定,引用类型(如string)内存占用可变。详细列出了整数、浮点及其他类型的字节数、位数和取值范围。 类型转换:包含隐式转换(自动执行)、显式转换(可能丢失数据)、Convert类方法及Parse/TryParse方法的使用场景和示例。 常用语法:包括转义字符用法、格式化输出方法(string.Format/插值字符串等)、条件判断语句(if/switch/三元运算符)和循环结构(for/foreach/while/do
2025-06-26 15:50:33
1094
原创 k8s部署篇---安装自己的镜像到工作节点中
两种构建image的方式都需要docker环境,docker版本最好新一点,不然会有很多意外情况,具体安装配置请看另一篇: Docker---windows下载安装及部署_windows如何安装docker-CSDN博客打包自己的项目文件,编写Dockerfile文件:编写好Dockerfile后,在当前目录执行(前提需要魔法工具,因为需要拉取基础镜像):成功后会得到一个名为 image-name的镜像,可以运行起来查看是否成功:如果想物理转移,可以打包成tar包:也可以push到私
2025-06-19 16:02:09
916
原创 一篇搞定模型训练与部署:yolov8训练个人数据集 + onnxruntime/onnxruntime-gpu部署加速(Windows超详细教程)
本文详细介绍了YOLOv8模型从训练到ONNX部署的完整流程。主要内容包括:1)环境配置(CUDA、cuDNN、ONNX Runtime);2)YOLOv8模型训练步骤(数据集准备、配置文件修改、训练过程);3)模型转换(PT转ONNX);4)ONNX推理实现(前处理、推理、后处理)。重点说明了ONNX Runtime的GPU加速使用方法,并提供了完整的推理类代码实现,包含图像预处理、推理和后处理(NMS)的全流程。教程适用于Windows系统,同时兼容CPU推理场景。
2025-06-15 10:12:30
1038
原创 pyside6开发篇---隐藏标题栏后,实现关闭、最大(小)化、窗口拖动、窗口拖动调整大小
代码很简单,但是这样就会失去最大化、窗口拖动、窗口调整大小等功能,需要我们手动实现。
2024-07-21 12:58:19
3236
1
原创 Docker---windows下载安装及配置(解决pull时间失败、过长问题)
官网下载地址(最新版):,需要魔法工具,本人使用下载完后运行安装:直接默认安装即可。
2024-07-20 20:10:04
2147
原创 工业相机---初步认识+如何选型
线放大倍数M = 像元大小 / 系统分辨率 = 4.7um / 0.06mm = 0.078,焦距 = 150mm x 0.078 / (0.078 + 1)= 10.85,则选择焦距在10mm左右的镜头。物体光线经过镜头后的成像最大尺寸是可以确定的,如果成像最大尺寸小于感光靶面的尺寸,这样会导致感光靶面的外围会有一些像素点没有被照射到光线,从而会浪费感光靶面的像素点。,反差=(照度的最大值-照度的最小值)/(照度的最大值+照度的最小值),反差的数值总是
2024-07-05 17:26:19
1981
原创 pyinstaller打包onnxruntime-gpu报错找不到CUDA的解决方案
会在这个目录中查找自定义的钩子(hooks)文件。钩子文件用于在打包过程中处理一些特殊的依赖或行为。2、电脑上已经安装与onnxruntime-gpu对应版本的cuda和cudnn,并加入了环境变量。使用onnxruntime-gpu完成了深度学习模型部署,但在打包时发生了报错:找不到CUDA。--additional-hooks-dir=.:指定一个额外的目录,--onefile:将所有的文件和依赖打包成一个单独的可执行文件。-w main.py:指定需要打包的py文件,不带控制台窗口打包。
2024-07-04 10:15:32
2750
原创 目标检测的必经之路:深度认识NMS的工作原理
NMS(非极大值抑制)详解 NMS是目标检测中的关键后处理步骤,用于筛选最优检测框。其核心思想是通过置信度排序和交并比(IoU)阈值去除冗余框,保留最佳结果。 流程: 输入检测框列表(含坐标和类别得分) 按置信度排序,选择最高分框加入保留列表 计算该框与其他框的IoU,丢弃高于阈值的重叠框 重复直至候选框为空 优缺点: 优点:有效减少冗余、实现简单 缺点:阈值敏感、计算复杂度高 改进方法: DIoU-NMS和Soft-NMS可优化传统NMS的局限性,如通过距离加权或软性抑制提升效果。代码示例展示了YOLOv
2024-06-30 18:16:04
657
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人