C Sharp委托、事件、多线程

发布时间:2026/10/7 15:26:40

C Sharp委托、事件、多线程 文章目录委托Delegate事件Event—— 安全的“通知系统”多线程Multithreading—— “同时做多件事”委托Delegate委托是方法的模板可以理解为接口中的方法调用时需要new但是在调用过程中要传入和委托声明一样的方法(参数列表要相同)delegatevoidFooDelegate();delegatestringFooInputDelegate(intnum);voidMain(){FooDelegatefooDelegatenewFooDelegate(Foo1);fooDelegatefooDelegateFoo2;// 如果委托不为空就调用委托方法fooDelegate?.Invoke();FooInputDelegatefooInputDelegatenewFooInputDelegate(Foo2);fooInputDelegate(66).Dump();}voidFoo1(){foo1.Dump();}voidFoo2(){foo2.Dump();}stringFoo2(intnum){return(num1).ToString();}在长耗时的程序中延迟1s输出内容delegatevoidCallback();voidMain(){HeavyJob(CallbackImp);}voidHeavyJob(Callbackcallback){Thread.Sleep(1000);callback?.Invoke();}voidCallbackImp(){HeavyJob.Dump();}委托的选择逻辑delegateboolRuleDelegate(intx,inty);intPock(inta,intb,RuleDelegateruleDelegate){if(ruleDelegate(a,b))returna;elsereturnb;}boolrule1(inta,intb){returntrue;}boolrule2(inta,intb){returnfalse;}voidMain(){Pock(10,20,rule1).Dump();Pock(10,20,rule2).Dump();}事件Event—— 安全的“通知系统”是什么事件是委托的升级版。比如你家门铃事件别人只能按门铃触发事件但不能直接拆掉你的门铃线路保证安全。为什么需要它安全外部代码只能订阅或取消订阅-不能直接清空所有绑定。场景比如游戏中的“玩家死亡时通知所有敌人停止攻击”。怎么用//步骤 1定义一个门铃事件publicclassDoorbell{//声明一个事件基于委托publiceventActionstringOnRing;publicvoidRing(){//出发时间按门铃OnRing?.Invoke(有人按门铃啦);// ?. 防止未订阅时出错}}//步骤 2住户的反应订阅事件publicclassResident{publicvoidReactToRing(stringmsg){Console.WriteLine(住户msg我去开门);}}//步骤 3使用门铃voidMain(){DoorbelldoorbellnewDoorbell();ResidentresidentnewResident();//住户订阅门铃时间doorbell.OnRingresident.ReactToRing;//有人按门铃doorbell.Ring();}住户有人按门铃啦我去开门?.安全检查等价于if(OnRing!null){OnRing.Invoke(...);}Invoke正式“触发事件”多线程Multithreading—— “同时做多件事”是什么假设你在煮饭主线程同时还要切菜子线程。多线程就是让程序能“同时”处理多个任务提升效率。为什么需要它防止主界面卡死比如下载文件时不冻结界面。充分利用CPU多核性能。怎么用//方法 1传统方式Thread—— 手动控制voidMain(){ThreadthreadnewThread((){Console.WriteLine(子线程我在切菜);});thread.Start();Console.WriteLine(主线程我在煮饭);}主线程我在煮饭 子线程我在切菜//方法 2现代方式Task—— 更简单高效voidMain(){Task.Run((){Console.WriteLine(子线程我在烧水);});Console.WriteLine(主线程我在炒菜);}主线程我在炒菜 子线程我在烧水//方法 3异步编程async/await—— 等待不阻塞publicasyncTaskCookDinner(){Console.WriteLine(开始做饭);//异步煮饭不阻塞awaitTask.Run((){Thread.Sleep(2000);//2sConsole.WriteLine(饭煮好了);});Console.WriteLine(开始炒菜);//煮晚饭开始//await CookDinner();//调用}asyncTaskMain(){awaitCookDinner();}开始做饭 饭煮好了 开始炒菜() {}这是一个 Lambda 表达式相当于快速写一个“匿名方法”。()参数列表无参数时留空。箭头符号表示“执行后面的代码”。{}代码块具体要执行的任务。ThreadthreadnewThread((){Console.WriteLine(切菜);});// 直接把任务写在括号里相当于voidCutVegetables(){Console.WriteLine(切菜);}ThreadthreadnewThread(CutVegetables);// 传入方法名委托和事件的区别委托是功能基础事件是加了限制的委托类似public和private的区别。多线程会加快程序速度吗不一定如果任务简单切换线程的开销可能反而更慢。适合处理耗时操作如文件读写。async/await 和 Task 的区别async/await 是基于 Task 的语法糖让异步代码看起来像同步代码更易读。
延伸阅读

更多相关文章

2026/10/7 8:08:11

c++ 中的容器 vector 与数组 array

当初自学 c 与 c 语言时,一直被指针弄的云里雾里。后来 c 中引入了容器,避免了指针。但是,一些教材把容器的章节放在书本中后面的章节,太不合理。应该把这种方便的功能放到前面,这样一些初学者就不会遇到太多生硬难懂的…

2026/10/5 2:40:10

计算机初学1

一、C语言 性能最高,适合底层开发和嵌入式系统。Java 适用于大型企业级系统开发和Android手机应用。Python 在高等数学计算、数据科学和人工智能领域应用广泛。二、C语言 是非托管代码,编译后直接生成机器指令,操作系统能直接识别和执行。其他…

2026/10/3 9:34:13

2026国赛C题模型稳健性(十六):灵敏度分析——扰动5%参数,观察模型“崩不崩”• 核心内容:控制变量法、局部灵敏度(One-factor-at-a-time)、可视化雷达图展示。

国赛期间专栏内发布相关内容,开赛后恢复原价158. 在数学建模竞赛中,一个模型的成功不仅取决于其对训练数据的拟合精度,更取决于其在参数发生微小波动时是否仍能保持输出结果的合理性与稳定性。模型稳健性,特别是对参数扰动的容忍能力,是评判模型质量的核心指标之一,也是…

2026/10/7 15:26:36

做题小技巧

目录 时间复杂度 快速读写 二进制高级用法 特殊关键字 下面我为大家分享一些做题小技巧。 时间复杂度 下为时间复杂度对应的数据规模。 极大约1e8约1e6约5000约500约20约12 快速读写 在代码开头加入这段代码: ios::sync_with_stdio(0); cin.tie(0); cout.…

2026/10/7 15:26:36

Claude Code 命令速查手册:高频指令、快捷键与实战工作流

1. 为什么需要一份趁手的命令速查手册刚接触 Claude Code 的那几天,我最大的感受不是“这工具真强”,而是“我到底该敲哪个命令”。终端里光标一闪一闪,脑子里却一片空白——想让它读文件,不确定是/read还是直接说路径&#xff1b…

2026/10/7 15:26:36

居间业务数据统计看板 三条取数口径怎么归一才对得上

同一个统计看板,两个人拉出来的数对不上,这类事在业务系统里很常见。多数时候不是谁算错了,而是口径没归一——同一个词,两个人理解的不是一回事。这篇把三条容易分叉的口径摆出来,逐条讲怎么归一。口径一:…

2026/10/7 15:26:36

AI赛事通(CompeteHub) 十月6号。kimi提供

✅ 第一档:现在(10月6日)真能报名#赛事截止说明1华为算法挑战赛CANN挑战赛10月16日算子性能优化,一等奖2万华为校招免机考免一轮面试,初赛9.5–10.19,决赛10.20–11.7现场2昇腾行业创新大赛2026电力行业算子…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

ESP32免重刷固件:浏览器直接修改NVS键值实现WiFi配置更新

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

SAP HANA查询结果导出CSV:避开乱码、性能与权限的实用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:05:03

数字后端Placement阶段Density与Congestion控制实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑