当前位置: 首页 > news >正文

C# 知识点整理(泛型 / IO / 委托 / LINQ / 事件 / 多线程)

一、泛型

  1. 核心作用参数化类型,一套代码适配多种类型;编译时类型校验,消除装箱拆箱,提升性能与复用性。
  2. 使用范围泛型类、泛型方法、泛型接口、泛型索引器,多泛型参数<T,U>
  3. 泛型约束 where(必记)
  • struct:只能值类型;class:只能引用类型
  • new():类型必须有无参构造,多约束写在末尾
  • 父类 / 接口约束:T 必须继承指定类、实现接口
  1. 配套排序接口 IComparable<T>实现CompareTo方法,返回负数 / 0 / 正数控制升、降序。
  2. 协变 out、逆变 inout 仅作返回值,in 仅作参数,解决泛型类型转换兼容。

二、文件与 IO 流(命名空间:using System.IO

1. 文件 / 目录四大类

  • 静态:FileDirectory,适合单次快速操作
  • 实例:FileInfoDirectoryInfo,频繁读取文件属性优先使用
  • 路径:绝对路径D:\\xxx、相对路径;操作前判断Exists防报错

2. 基础文件操作

File:Create/Delete/Move/Copy/ReadAllText/WriteAllText; Directory:创建 / 删除 / 递归删除文件夹、遍历子文件。

3. 四大流

  1. FileStream:字节流,通用读写图片、视频、所有文件,需手动转字节数组
  2. BufferedStream:缓冲流,大文件复制提速,减少磁盘 IO
  3. StreamReader/StreamWriter:文本专用,直接操作字符串,支持按行读写
  4. 规范:所有流使用完必须Close()释放资源,Flush强制写入缓存

4. 递归

递归遍历全部文件夹文件;递归实现斐波那契、累加求和。

三、委托、Lambda、LINQ

1. 自定义 delegate

方法容器,存储方法地址;多播委托+=绑定多个方法、-=移除。

2. 系统内置委托(无需手写 delegate)

  • Action:无返回值,支持 0~16 个参数
  • Func:带返回值,最后一个泛型为返回类型

3. Lambda 表达式=>

简化匿名委托;单参数可省略括号,单行代码省略{}与 return。

4. 委托传参

将逻辑方法作为参数传入,实现代码解耦(集合过滤、删除核心原理)。

5. LINQ 链式(依托 Func)

常用:Where筛选、Distinct去重、OrderBy排序、ToList转回集合、ForEach遍历。

四、事件 event

  1. 本质:对委托封装,发布订阅模式,UI、通知场景专用。
  2. 委托 vs 事件: 外部只能+=订阅、-=取消;仅定义类内部可触发,安全性更高。
  3. 标准写法
  • 自定义委托绑定事件,事件?.Invoke()空安全触发
  • 系统标准EventHandler(object sender, EventArgs e),无需自定义委托
  1. 自定义 add/remove 访问器,可拦截订阅操作。
  2. 规范:事件命名 OnXXX;多播仅保留最后一个方法返回值。

五、多线程 Thread(using System.Threading

1. 基础概念

进程:独立程序内存容器;线程:进程内执行单元,并发抢占 CPU。

2. 线程基础操作

  • 创建:构造传入方法 / Lambda;Start()启动
  • Thread.Sleep(ms)线程休眠;Join()阻塞等待线程执行完毕
  • IsBackground后台线程:前台线程全部结束,后台强制终止(启动前设置)
  • Priority:线程优先级,仅提高 CPU 获取概率,不保证顺序

3. 线程安全 lock

多线程操作共享数据会错乱;lock 互斥锁,同一时间仅一个线程执行临界代码;锁对象推荐私有 object,禁止值类型。

4. 补充拓展

ThreadPool线程池复用线程,减少创建销毁开销;Task 为.NET 现代多线程方案;嵌套锁易产生死锁。

六、注意点

  1. 文件操作判断路径存在,捕获 IO 异常;流必须关闭释放资源。
  2. 泛型约束多条件时new()放最后。
  3. 委托、事件、LINQ 三者配合,是集合筛选、界面通知核心方案。
  4. 多线程共享数据必须加锁,区分前后线程避免程序提前退出。

http://www.jsqmd.com/news/1133092/

相关文章:

  • Beyond Compare 5密钥生成器:3种技术方案彻底破解授权限制
  • BetterNCM安装器:3分钟搞定网易云插件,告别繁琐手动安装
  • 终极指南:如何用OBS RTSP服务器插件实现专业级局域网直播
  • 最新独角发卡2.9.9魔改用户版源码 — 专为hyper模板定制的自动发卡系统
  • 别再凭感觉用 AI 写代码了!Spec Coding 才是大厂认可的 AI 工程化写法
  • 终极Wand增强工具:免费解锁WeMod Pro功能完整指南
  • 终极指南:如何用BetterGI轻松实现原神PC端全自动化
  • 企业级AI Agent构建指南:从原理到实践,实现业务流程自动化
  • Python 后端基础(十六):Linux 部署基础,目录、进程、端口、日志和常用命令讲清楚
  • 2026年无锡细胞存储行业发展现状与机构业务布局梳理
  • 解放双手的FGO刷本革命:Fate/Grand Automata实战指南
  • 免费获取9大网盘高速下载权限的完整指南:LinkSwift网盘直链下载助手
  • 5分钟掌握AMD Ryzen SDT调试工具:免费解锁处理器隐藏性能
  • 基于SecGPT-14B构建AI驱动的攻击脚本智能分析与自动化预警系统
  • BetterNCM安装器:让网易云音乐插件管理变得像点外卖一样简单
  • 家长必看!孩子用AI作业提分18%却毁掉考试?3个避坑指南
  • 网易云音乐插件管理器终极指南:5分钟打造个性化音乐体验
  • Fastboot Enhance:Windows平台终极Android刷机工具箱,新手3分钟上手指南
  • 电脑微信、QQ 缓存完整清理教程(官方自带工具,安全不丢聊天记录)
  • 终极Wand-Enhancer完整指南:5分钟解锁游戏修改器高级功能
  • 告别GPG复杂配置:age现代文件加密工具从入门到实战
  • 3种逆向工程方案深度解析:如何破解Beyond Compare 5的RSA加密授权机制?
  • Appium自动化测试实战:语音通话功能从环境搭建到质量验证
  • 优质多少钱隔音落地窗铝合金窗靠谱吗
  • OpenSSL命令行终极指南:轻松掌握证书管理与加密操作
  • 小样本统计推断:为什么t分布比正态分布更可靠
  • 当代码遇见生命:CRISPR 如何精准“粉碎”不可成药的癌细胞
  • 终极指南:5分钟掌握docx2tex实现Word到LaTeX高效转换
  • DSC法实测PCB Tg值:从ASTM E1356标准到3种常见曲线解读
  • EhViewer:基于Material Design 2的终极开源漫画阅读应用