c#进阶之Delegate
委托是什么?答:委托是一种类型 等同与 一个class类,继承System.MulticastDelegate,但mult....gate是一个特殊类,不能够派生
委托的调用,如何去使用
1/委托名.Invoke();
2/委托名();
3/委托名.BeginInvoke(null,null);
3.调用的方法与委托的参数签名一致
为什么需要委托,为什么会有委托?
答:1.例如 需要造一个车,其他的都一样,只是发动机不同,那么发送机很复杂,那么我们可以将发送机外包出去,我们只需要调用创造发动机的方法就可以了,这里就可以用委托
2.可以解耦
看一下下图,那么通过+=是怎么执行的?-=是怎么执行的?
1.+=是一个一个按照顺序执行
2.-=是从后往前进行匹配,找到第一个吻合的就移除,且只移除一个,找不到也不会异常。若是匿名方法,那么通过-=也不会被删除
同样的,若是写成 new Stuent().Study;那么通过-=也不会被删除。
3.有一个限制:如用-=,那么必须保证 是用一个实例同一个方法。
什么是多播委托?
1.第一种:通过遍历.(可以把beginInvoke修改为invoke也可以)
2.+=,-=都算是多播委托
委托主要用于观察者模式?
答:是的。
事件是一种委托么?
答:是的。
如何定义一个事件?
如何使用事件?
答:因为是委托,所以和原来一样去使用和调用。
委托和事件的区别是什么?有什么联系?
1、事件是一个委托的实例,委托是一种类型
2、事件,控制了实例的使用权限,更加安全。
为什么要用事件?事件有什么用呢?
从第一幅图可以看到 在外部(另一类文件)事件可以Invoke()以及赋值。但是事件是不被允许的。
从第二幅图可以看到 在内部(同一类文件)事件可以Invoke()以及赋值,当然委托也是可以允许的。
第一幅图:
第二幅图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现