白话:指针-委托-回调-Event-UnityEvent

一、指针

1、拗口的定义: 保存内存地址的变量,用于直接操作内存中的数据
2、用人话来讲就是: 指针一种特殊的变量,它指向两一个变量或者方法。
3、举例: Unity中的某些引用类型的数据类型,有点像指针了,A是一个引用类型,执行B=A的操作后,A和B其实已经指向同一个东西了。
4、提问: 我有一个方法(function),能不能用一个指针来保存呢?
好问题,这就是委托!

二、委托

这个翻译确实比较拗口,还不如用上古时候的【函数指针】来讲。
1、定义: 代表对方法的引用,用于封装方法
2、用人话来讲: 委托就是一种特殊的数据类型,它哪里特殊了呢?!别的数据类型存的东西都是数据,委托的类型存的数据是一个方法(函数、或者匿名函数)。如果你熟悉匿名方法的话,更直白的说就是:委托可以用来装一坨代码,这坨代码可以是一个普通的方法,可以是一个匿名方法。

Action fn = ()=>
{
    //一坨代码
};

3、委托有哪些种类: C#中的委托有Action和Func(function的简写),Action里面村的方法是返回void的,Func里面存的方法是有返回值的。
Action就是:妈妈叫我去吃饭,吃完我就去玩了。
Func就是:妈妈叫我去吃饭,吃完后带一份回来给她。

4、委托与【+=】和【-=】操作符: 委托其实是一个列表,这个列表里面可以装无数个签名相同的方法,所谓签名相同是指返回值和参数列表相同。+=操作其实是在列表里面Add一个方法,-=操作其实是把之前Add的方法remove掉。
委托执行的时候,其实是执行了方法列表里面的方法,全部执行一遍。

委托的这个特性是不是让你想起事件(Event)?!

三、回调(callback)

看见callBack就会有点头疼,因为如果回调方法满街乱窜的话,就会出现代码理不清,估计跟上古goto乱用有异曲同工之妙。
但是如果按照规范来用的话,回调确实是个好东西,不然怎么会有事件呢?你说是吧,因为事件就是基于回调机制的嘛,那什么是回调呢。

举例: 你去门口商店买烟,刚好烟卖完了,进货的快递小哥还在路上。这是你对老板说:我留个电话给你,到货你打我电话。

这就是回调,回调入口就是你的手机号码,回调内容就是:喂,红塔山到了,下来拿。

四、事件(Event)

事件是啥呢,你去楼下买烟,烟没了,还在路上,你告诉老板娘:烟到店的话,你打我手机。
总结就是:你留电话给别人(订阅),烟到店的时候打个电话通知你(订阅的事件)。你买烟结束后,你总不会让老板娘一直通知你是吧,那么,你要取消订阅(老板娘,我已经买到烟了,后面不用一直打我电话了。)

聪明的你应该想到了:既然有委托了,我自己用+=和-=来订阅不就完了嘛,干嘛还要弄一个Event类型呢?我也是这么想的,后来才发现,你订阅老板娘买烟这个事件,事件的触发只能是老板娘,而不能是老板娘家的三岁娃娃。什么意思,小孩会玩手机,他看短信后,觉得好玩,私自给你打电话说“叔叔,你的烟到了”,当你去店里的时候,老板娘才告诉你,是娃娃闹着玩的。

委托就相当于一个没有限制的手机,放在家里谁都可以打开玩耍,给你回电话。那么给手机加个开机密码,只有老板娘才能回复消息,这样就是事件。事件与委托的区别:事件的触发只能被订阅者自己触发。委托的话,别人也可以Invoke。

五、UnityEvent

UnityEvent 就是Unity自己封装的Event,它与Event的区别在于:UnityEvent可以在Inspector上挂载和取消。如过你不用inspector面板操作的话,直接用Event即可,轻量啊。当然了,如果你比较自信的话,你也可以用一个委托搞定,更轻量。

六、胡乱总结

指针的儿子是委托
委托的兄弟是回调
委托的儿子是事件(Event)
[事件]的儿子是[Unity事件]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值