Unity3D开发之委托系列
来源:互联网 发布:怎么上传图片到淘宝 编辑:程序博客网 时间:2024/06/07 06:10
因为我是先接触的unity才去学的c#,所以对于c#的理解真的不是很全面,简言之语法基础薄弱。我是在unity项目中应用到什么语法就去学什么语法了解然后熟练应用。之前做的Unity项目一直没有用到委托,对委托的理解就不是很深入。总觉的那玩意没啥用。直到前几天接到一个项目,里面需要大量使用委托才让我对其使用有了自己的理解。
我们可以看到C#委托有以下几种类型。
第一种:delegate。首先声明一个委托,他的用法跟类的用法有点相似,需要再次声明一个委托类型,如下:
public delegate void MyDelegate(int a,string b);public MyDelegate md;delegate委托自由度比较高,可以有参输入,也可以无参输入,可以有返回值,也可以无返回值。输入参数最多32个。
第二种:Action。他的用法比较简单,是一个可以输入参数但无返回值的委托。如下:
public Action<T> MyAction;可以输入参数为T类型的参数。不过最多仅支持16个参数输入,但正常人完全够用。
第三种:Fun。和Action一样,只不过Fun委托必须有返回值:
public Func<T> MyFun;第四中:predicate。输入参数只能是一个且必须返回值类型是bool的。
public Predicate<T> MyPredicate;
委托不仅可以接受一个函数名,还可以累加,如:
MyAction = DoA; MyAction += DoB; MyAction -= DoB;
以上是对于c#的四种委托类型的介绍。下面说下我在项目中对委托的应用。
做的项目中有一个特殊的问题是,很多时候会用到一个函数,但是函数的结尾做的事情就会根据不同的物体有所不同。如下代码:
public void WangCooking() { //洗菜 //切菜 //油炒 } public void LiCooking() { //洗菜 //切菜 //水煮 }在我们做饭的时候我们会必须要做的是洗菜切菜,而后面的操作就会因人而异。如果我们像上面那么写代码,就会产生很多冗余代码。当洗菜和切菜的代码几百行的时候,会复制粘贴的我们头疼,自己看着也难受,当然也不实际,这时候我们就要用到委托。会让代码结构看起来更加清晰。假如切完菜做的事不需要输入参数不需要返回参数,我们就声明Action委托,然后在每次调用cooking函数之前将委托赋上方法,然后再切完菜运行我们的委托。代码如下:
public Action MyAction;public void StartCooking() { //if(wang) //{ // MyAction=WangCooking; // Cooking(); //} //else //{ // MyAction=LiCooking; // Cooking(); //} } public void Cooking() { //洗菜 想象这里几百万行代码就能理解他的实用之处 在想想有好几百人要调用这个函数 //切菜 //MyAction(); } public void WangCooking() { //油炒 } public void LiCooking() { //清蒸 }
委托实际上就是将函数名作为参数。我们用委托将函数名保存下来供来调用。以上是我对委托使用的理解,如果后续还有更多的使用与理解我会更新上来与大家分享。
阅读全文
0 0
- Unity3D开发之委托系列
- Unity3D游戏开发之委托(Delegate)
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- 事件/委托机制(event/delegate)(Unity3D开发之十七)
- 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)
- 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)
- 【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- C#系列之委托机制
- unity3D游戏开发实战原创视频讲座系列1之3D俄罗斯方块开发
- unity3D游戏开发实战原创视频讲座系列2之2D坦克大战开发过程
- unity3D游戏开发实战原创视频讲座系列3之全民飞机大战游戏开发
- unity3D游戏开发实战原创视频讲座系列5之狼烟狙击游戏开发
- unity3D游戏开发实战原创视频讲座系列6之生死逃亡游戏开发
- unity3D游戏开发实战原创视频讲座系列7之消消乐游戏开发
- unity3D游戏开发实战原创视频讲座系列8之拳王争霸游戏开发
- unity3D游戏开发实战原创视频讲座系列9之塔防类游戏开发第一季
- unity3D游戏开发实战原创视频讲座系列13之帽子戏法游戏开发(预告)
- Eloquent JavaScript 笔记 十九:Node.js
- 自然语言处理基础(4)--数据平滑技术
- Android Service完全解析,关于服务你所需知道的一切(上)
- Collection 和 Collections的区别。
- 解析Android上强大的图表库MPAndroidChart
- Unity3D开发之委托系列
- HttpClient常用操作
- hibernate学习之多对多
- 刷清橙OJ--A1093.闰年
- 关闭正在播放的视频函数
- JAVA序列化与反序列化
- 刷清橙OJ--A1094.牛顿迭代法求方程的根
- Android Service完全解析,关于服务你所需知道的一切(下)
- Spring Boot 容器选择 Undertow 而不是 Tomcat