彻底搞懂委托与事件

学unity的同学C#委托事件傻傻分不清楚,今天我就给大家来讲讲什么是Unity的委托的几个要点:

1: 定义一个委托的类型委托是一种容器,容器里面放的是函数方法。而函数的形式各不相同,参数,返回值各不相同,所以你做委托之前,先得要定义好这个委托容器存放的函数的类型,即委托类型。delegate void Delegate_func(参数1, 参数2)这句是定义了一个Delegate_func的委托类型,里面存放的函数的类型为: void Delegate_func (参数1, 参数2)

2: 定义一个委托容器变量,来存放函数当我们定义好委托类型后,也就定义了这个容器存放什么样的函数,接下来我们定义一个委托变量, 这个就比较简单了, Delegate_func clicks, 如何往容器里面加入函数呢?一个是赋值=,一个 += 一个是-=;clicks = xxxx函数; clicks += xxxx函数; clicks -= xxxx函数;

3: 触发委托定义了好了函数类型后,将函数加入到委托容器后,你只要触发委托调用,委托就会帮你把容器里面的每个函数都调用一次, 触发的时候和调用普通函数没有区别,例如clicks(参数1, 参数2);

4: 委托有什么用呢?我们经常希望某个事件发生了以后,就做某种处理, 比如,收到网络事件后做响应的处理。这个时候,我们可以定义一个委托变量,将有事件发生后要处理的函数对象都保存进去, 当有事件发生的时候,触发这个委托,这样,之前的那些函数都会被调用到。有事件了,做哪些处理。

5: event又是什么鬼?会有这种情况,一个模块A定义了一个委托变量, 外部模块B,要给这个委托变量添加回掉函数, 这样,我们一般会把这个变量设置成public,直接可以访问,可是问题来了,触发的时候,A模块可以触发,B模块也可以触发,可是我如果只想要A模块触发,B模块只能添加,不能触发,而public 权限B模块也可以触发,这种如何解决呢?这个时候定义委托变量的时候,在前面加event, 这样外部模块B,只能往委托里面来添加函数,而不能触发函数调用,触发函数调用,只有模块A,这个就是event修饰的作用。

猜你喜欢

转载自blog.csdn.net/jadeshu/article/details/106334650