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