获得徽章 0
- 【解答】c# 事件和委托有些什么区别,求大神浅显易懂地解释一下?
委托和事件是高级编程语言的一座特大山峰,我自己去理解以及解释给别人听,都尝试过无数次,这次是我感觉解释的比较简单明了的一次,兄弟们欣赏一下?!
委托有两面。其中一面好理解,你按JS函数表达式去理解,函数可以当作参数和返回值,基本就抓住要点了。
委托还有另外一面,叫作多播。如果我们把委托变成一个类的成员,就可以实现一些非常神奇的事情。比如类A有一个委托类型成员SomeEvent,我们就叫它事件吧,同时定义一个发布事件的方法EmitSomeEvent。我在类B内,实例化A(a),然后给事件多播几个方法,像这样a.SomeEvent+=SomeHandler,我们叫它订阅事件,SomeHandler是一个回调方法。那么,我们发布事件a.EmitSomeEvent,就能神奇的触发B上的回调方法了。
然后再回想一下,你在UI框架中,是怎么为Button的Click绑定回调方法的?Button就是类A,Click就是它的事件,Button是在哪里实例化的?在用它的当前类里面,也就是类B。
事件就是利用委托的多播机制,实现了发布和订阅的解耦。上面的逻辑里,其实还有一个问题没有解释,就是Click事件是谁发布以及如何发布的?这就涉及UI框架的内部机制了,具体咋实现咱不知道,只要明白UI框架捕捉到了用户点击动作,然后就发布了Click事件,进而触发了订阅它的回调方法。展开
评论点赞 - 如果鸿蒙Next刚问世,就成为“上一代产品”,怎么办?| 不晓得大家有没有关注鸿蒙Next,反正我去年就开始上手ArkUI了,在很多地方安利过。纯血鸿蒙将在6月21号发布开发者测试版,并在第四季度正式发布商用版。作为第一个具有指标性意义的国产操作系统,相信大多数人和我一样,激动而又隐隐自豪。
但是,有另外一个信息,大家注意到了吗?微软发布了PC+Copilot,直接让人们看到了未来PC操作系统的新模样。作为.NET技术栈,我编程时一直都有在用Copilot。嵌入到PC及Office365的Copilot,虽然没用过,但看到试用报告后,不得不感叹它的强大。尽管没有微软宣传的那么神乎其技,但依然能看到未来AIPC的图景。
鸿蒙诞生时,有被动因素,但它不是无准备的应急产物。我们知道,鸿蒙一出来,就提出了万物互联、分布式的理念,在2019年,这绝对是领先的。但这几年,OpenAI带着生成式AI,发展实在是太快了,快到让人感觉这个世界好像马上要颠覆。几个业已成熟的操作系统,都在迅速跟上这波势头。万物互联,如果不加上AI前缀,2024年可能还不算落后,但明年就不一定。如果鸿蒙这次无法跟上,会不会发布时,就成为过去时?
上个月,OpenHarmony发布了4.1正式版,有看到一些AI“含腾量”,但还不够,AI的定位还是作为可分可合的Ability。AI应该像分布式一样,成为鸿蒙的根基,去赋能所有Ability和更上层的应用开发。6月即将召开的开发者大会,大家看议程了吗?主题演讲保密,大家自然知道是啥,就是不知道会不会官宣微信。这不是重点,重点是后面几天的日程,AI含量迅速提高了,可以看到盘古大模型、智算存储、大模型混合云等。希望鸿蒙能抓住这个机遇,为我们带来一个真正的万物“智”联的操作系统,这个新饭碗,我能不能端起来,就看你了哟!
----------------------------------------------------
我是functionMC >>>function MyClass...
C#/TS/鸿蒙/科技问题,以及如何写Bug、防脱发、送外卖等问题,都可以私信我交流!
----------------------------------------------------
本期留言互动
:
你对鸿蒙Next有什么期待?不要再说鸿蒙是安卓套壳了!展开
评论点赞 - 中国选择月球,美国选择AI | 昨天的两个大新闻,不晓得大家有没注意到。中国的嫦娥六号成功完成了月球背面采样任务,将月球土特产带回地球;与此同时,英伟达的CEO黄仁勋在COMPUTEX大会上宣布了下一代AI芯片Blackwell,并预测“物理AI”将引领下一波技术浪潮。一边为我们国家一步步迈向宇宙感到自豪,另一边又为AI发展上的差距感到沮丧,可谓五味杂陈呀。这种路线的PK,隐隐中,似乎在《流浪地球2》中看到。
黄仁勋的“物理AI”主张,将人工智能的发展推向了一个新的高度。他认为,AI不应仅限于数据和算法的世界,而应深入物理世界,实现机器人和自主系统的广泛应用。这个观点与《流浪地球2》中AI派的理念不谋而合。在电影中,AI派主张利用人工智能的强大计算和决策能力,让人类意识深藏于地下掩体内的服务器内,放弃现实世界,并交由机器人维持。然而,这一理念也带来了对人类独立性的担忧,正如电影中人类对550W人工智能的戒备与抗衡。
相较之下,中国的嫦娥六号任务则代表了另一种科技路线的选择——依靠人类的智慧与创新,来解决现实问题。这种方式类似于电影中的地球派,他们坚信人类不应该放弃人之所以为人的独立性,人类一定能够通过自己的努力,保护和延续地球文明,将人类带到广阔的宇宙中去。嫦娥六号的成功,不仅是中国航天科技的重大突破,也象征着人类对未知世界的勇敢探索。
是依赖高度发达的人工智能,通过算法和计算能力解决一切问题?还是保持人类探索精神,通过实际操作和创新,来实现生存空间的突破?这已经不是电影中的假想情景了,当前,中国在大力发展新质生产力,而美国主力推人工智能AI,它们不就是电影在现实中的投射吗?
--------------------------------------------------------
我是functionMC >>>function MyClass...
C#/TS/鸿蒙/科技问题,以及如何写Bug、防脱发、送外卖等问题,都可以私信我交流哦!
--------------------------------------------------------
本期留言互动[what][what][what]:
你觉得美国现在上不了月球,是因为缺钱?还是一种战略选择?展开
赞过171 - 为什么有那么多人,没有跟上技术的更新迭代 | 如图看到一个问答,同在.NET,我都替楼主着急。
minimal只是让初学者更容易入手,不用一开始就去理解类、静态方法、入口方法入参等概念。性能上?实打实的项目,我觉得影响微乎其微。visualstudio新建项目,默认选项可不是minimal。
Blazor去年(2023年)已经发布了Auto模式,可以综合Server和WASM的优势,如果让其它前端技术栈相比,简单的说,Blazor已经天然能够和Next.js或Nuxt.js框架PK,注意,是天然。补充,Blazor就是AspNetCore的组成部分。
对标springcloud的微服务框架.net aspire,去年发布试用版,最近已经发布了正式版,虽然现在生态还比较小,但用起来不要太爽。
asp.net core不复杂,它很轻、它很猛。如果真得懂了asp.net core,懂了鉴权授权,懂了常用的中间件。不用封装的框架,比如对标springboot的abp,或者更轻的furion,干拔asp.net core是最爽的。
据我了解,springboot也不是微服务,springcloud才是。我不懂java,我瞎猜的。
灵魂拷问一下,如果你在某个技术领域多年,是否有动力、有兴趣,其实我想说的是,是否还有兴趣,跟上技术的迭代?展开
赞过121 - JS和C#/JAVA的多线程,究竟有什么不一样?| 这么说,相信你应该能明白。
JS是单线程事件驱动模型,语言本身是不支持多线程的,但Web和Node运行时,在各自的运行环境中实现了多线程,Web中实现多线程的模块是Worker、SharedWorker、ServiceWorker等,而Node环境中则是 worker_threads、cluster、child_process等。所以,JS中的I/O密集的高并发可以通过事件机制处理,而CPU密集的并行任务,可以启用多线程Worker。
而C#是天生支持多线程的,主要的实现方式有Thread、ThreadPool和Task。其中Thread需要手动创建和销毁线程,而ThreadPool和Task的线程,托管在后台管理的线程池中,自动管理线程的创建和销毁,可以实现线程的复用,避免线程的创建销毁的资源消耗。但是,C#没有事件机制,高并发和并行任务,都是依靠多线程来完成。JAVA的多线程和C#类似。
这么说,JS和C#,好像都能解决高并发和并行任务。但是两者的多线程还是有本质区别。(1)JS的多线程,无论是Web还是在Node环境中,都是基于消息通信,线程之间的资源是相互隔离的,主线程和子线程之间,通过消息进行通讯。首先,创建资源隔离的线程就比较消耗资源,而消息通讯的过程也比较消耗资源,特别是需要处理消息数据的序列化和反序列化。所以,使用JS的多线程时,要想清楚是否真得需要,能用事件机制解决的,就不要用动用多线程。(2)而C#的多线程,是基于内存共享的,线程之间共享数据,所以效率会高很多,但这种模式需要注意资源争抢和死锁的问题。而现代C#的多线程,基本都是基于后台托管的线程池,所以可以有效避免线程创建和销毁的消耗,同时通过Task、async/await等方式,即可以优雅的使用多线程,又能安全的避开死锁等安全问题,基本上不需要有啥心智负担。
再补充说一下鸿蒙ArkTS中的魔法,我也只是看文档,具体表现以及实现原理不清楚。在ArkTS中,新增了TaskPool,实现了多线程的池化管理,在4.1版本中,更是实现了消息对象的引用共享,即不需要序列化和反序列化,这些魔法能够大大提升多线程的执行效率和安全性。展开
赞过评论2 - Deno,这个诞生时都不正眼瞧Node.js的天选之子(虽然它们是同一个爹生的两兄弟),正式推出了JSR(JavaScript Registry),一个新的包管理平台,旨在简化和增强 JavaScript 和 TypeScript 依赖项的管理,原生支持TypeScript,兼容npm,并且同时支持Deno、Node.js、Bun等JS运行时。Deno,再不弄出点动静,感觉这个项目都快黄了,现在的势头和它刚诞生那伙,真是天上地下啊。Bun、Bun、Bun......Deno,听到枪声了吗?!
你认为,未来5年,JS的运行时会是怎样的一幅图景?展开
赞过评论1 - 看到一篇高赞文章,说的是uni-app x,都2023了(也可以换为2024),uniapp为什么还投入这么多,搞跨平台的uni-app x。各个垂域APP的坑位基本都占满了,到处都在裁员,APP的市场还有多少?我想了一下这个问题,1)windows桌面应用的市场,应该是比手机APP早几十年的,又有Web的挑战,到现在,桌面应用开发应该还没死;2)新的应用需求,总会顺应时代发展出现;3)uniapp的目标客群,从来都不是中大厂,而是尾部在基数上占大比例的中小开发者。2024了,有这么一个新技术路线的跨平台出来,挺好的,同时也希望uni-app x,效仿flutter,能大大方方的开源出来,这样生态共建的速度才能加快。展开
等人赞过711 - #每天一个知识点# JS/TS中,原型对象可以通过prototype访问,比如Person.prototype。既然能够以这种方式访问,那么prototype是不是类的静态属性?
评论点赞 - 许多人在问:鸿蒙会成为未来的主流操作系统吗?
如果这个问题加个介词-中国,那答案是肯定的。大的来说,这基于华为在软硬件生态上的布局、政府的大力支持、以及大家的情感认可;细的来说,ArkUI的博采众长,它的声明式是市场上这么多声明式语法里面最舒服的,尤其是和flutter对比后;日益增加和完善的API数量,现在估计两三万个了吧,说明功能越来越完善;极有可能是微内核,期待它在安全性和稳定性上的表现;以及刚出时就在宣扬的分布式架构。这些,足以支撑它成为未来中国的主流操作系统。
问题是,它能否成为国际的主流操作系统之一?要想在全球市场上占据一席之地,我就没想到有啥有利因素。少数几个利好,也许就是鸿蒙能先在国内生存下来,只有活下来,才能慢慢长大。一旦在国内这种内卷程度的市场活下来,能出海的时候,那就是秋风扫落叶了。你们觉得呢?展开
2点赞
: