没有合适的资源?快使用搜索试试~ 我知道了~
首页C#委托与Unity3D中的观察者模式探索
C#委托与Unity3D中的观察者模式探索
需积分: 9 0 下载量 158 浏览量
更新于2024-07-16
收藏 720KB PDF 举报
"《庖丁解牛聊委托:编译器的秘密与Unity3D实践》深入探讨了C#编程中的委托机制及其在Unity3D中的应用。文章首先回顾了观察者模式,强调其与委托的关联,即观察者模式中的主题和观察者在委托中的对应。在C#中,委托是一种强大的工具,它允许程序员将一个或多个方法作为参数传递,实现回调函数的功能。 0x01章节介绍了观察者模式,通过现实生活中的例子(如报纸订阅)解释了主题和观察者角色,即一个对象(主题)在状态变化时通知其他相关对象(观察者)。在软件开发中,观察者模式有助于实现松耦合和事件驱动的程序设计。 0x02部分讨论了Unity3D中的传统通信方式,如SendMessage和BroadcastMessage,然后倡导开发者转向使用委托来替代,提高代码的灵活性和效率。委托使得可以在单个操作中同时处理多个方法,避免了繁琐的消息传递链。 0x03至0x04章节深入剖析了委托的实现原理,揭示了其内部工作机制,包括如何声明、存储和调用委托方法。这部分内容对于理解委托在C#中的作用至关重要,可以帮助开发者更好地利用这一特性。 0x05部分重点讲解了如何通过委托调用多个方法,包括静态和实例方法的组合,以及如何利用lambda表达式简化委托的创建。这部分内容适合希望提升代码组织和性能的开发者。 《庖丁解牛聊委托》深入浅出地讲解了C#委托的理论和实践,以及在Unity3D中的最佳实践,为开发者提供了一种高效、灵活的编程解决方案。文章旨在帮助读者理解和掌握委托的使用,从而优化项目开发流程。"
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/12093078/bg8.jpg)
{
Debug.Log ("Double Num: " + num * 2);
}
}
下面我们来看看这段代码做的事情。在最开始,我们可以看到 internal 委托类型
MyDelegate 的声明。委托要确定一个回调方法签名,包括参数以及返回类型等等,在
本例中 MyDelegate 委托制定的回调方法的参数类型是 int 型,同时返回类型为 void。
DelegateScript 类还定义了两个私有方法 PrintNum 和 DoubleNum,它们的分别实
现了打印传入的参数和打印传入的参数的两倍的功能。在 Start 方法中,MyDelegate
类的实例 myDelegate 分别引用了这两个方法,并且分别调用了这两个方法。
看到这里,不知道各位读者是否会产生一些疑问,为什么一个方法能够像这样
myDelegate = PrintNum; “赋值”给一个委托呢?这便不得不提 C#2 为委托提供的
方法组转换。回溯 C#1 的委托机制,也就是十分原始的委托机制中,如果要创建一个
委托实例就必须要同时指定委托类型和要调用的方法(执行的操作),因而刚刚的那行
代码就要被改为:
![](https://csdnimg.cn/release/download_crawler_static/12093078/bg9.jpg)
new MyDelegate(PrintNum);
即便回到 C#1 的时代,这行创建新的委托实例的代码看上去似乎并没有让开发者产生
什么不好的印象,但是如果是作为较长的一个表达式的一部分时,就会让人感觉很冗繁
了。一个明显的例子是在启动一个新的线程时候的表达式:
Thread th = new Thread(new ThreadStart(Method));
这样看起来,C#1 中的方式似乎并不简洁。因而 C#2 为委托引入了方法组转换机制,
即支持从方法到兼容的委托类型的隐式转换。就如同我们一开始的例子中做的那样。
//使用方法组转换时,隐式转换会将
//一个方法组转换为具有兼容签名的
//任意委托类型
myDelegate = PrintNum;
Thread th = new Thread(Method);
而这套机制之所以叫方法组转换,一个重要的原因就是由于重载,可能不止一个方法适
用。例如下面这段代码所演示的那样:
using UnityEngine;
剩余42页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://profile-avatar.csdnimg.cn/2103881332f243ae919e07ee65152bfc_zhangshun198703.jpg!1)
大川君
- 粉丝: 3
- 资源: 91
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Vue实现iOS原生Picker组件:详细解析与实现思路
- Arduino蓝牙小车:参数调试与功能控制
- 百度Java面试精华:200页精选资源涵盖核心知识点
- Swift使用CoreData填坑指南:CoreData在Swift 3.0的变化
- 微距离无线充电器创新设计及其实验探索
- MTK Android平台开发全攻略:44步详解流程
- RecyclerView全面解析:替代ListView的新选择
- Android开发:自动适配中英文键盘解决方案
- Android调用WebService接口教程
- Android开发:BitmapUtil图片处理全解析与实例
- Android多线程断点续传实现详解
- PCA算法在人脸识别会议签到系统中的应用
- EventBus 3.0:Android事件总线详解与实战应用
- Android FileUtil:全面解析文件操作实用技巧与实例
- RecyclerView添加头部和尾部实战教程
- Android实现微博滑动固定顶部栏实战与优化
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)