Unity&&C#学习笔记-委托和事件详解

委托

委托为什么可以不new

不写NEW的时候,编译的时候会自动隐士转换为NEW

委托的实质

函数的调用都是先寻找函数的首地址,然后在去调用,而委托的本质是记录函数的首地址,就和调用函数的本质一样。类似于函数指针

一定要new才能给其中的成员元素赋值,为什么呢?因为其没有初始化,没有为改变量申请内存空间,只有变量名有内容空间。原因:委托可以不用new的原因就是因为变量名可以直接赋予函数的首地址,可以去直接访问。(?)

委托是类,因此凡是能够定义类的地方,都能定义委托

委托多播

要创建一个多播委托,可以使用 "+=" 运算符将一个委托与另一个委托连接起来,形成一个包含多个方法引用的新委托。

委托多播本质上是存入多个函数的首地址,因为委托是引用类型本质是存入委托函数的首地址

事件

事件的创建需要一个委托才能声明

事件只能在类中声明,把委托当成一种特殊的变量类型,事件就是委托的实例

事件只能在当前的类中invoke

类外只能+-函数

总的来说事件Event是一个添加了许多限制的委托。

类外调用方法

总结:

1、委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的指针。

2、委托和事件没有可比性,因为委托是类型,事件是对象

3、其实事件是委托的一个修饰符,加了event(事件)修饰之后,委托就被阉割了,假设这个加了修饰符的事件称为事件1,通过事件1我们可以更好地控制注册和注销,也就是对于一个外部类,那么他只能“注册自己+=、注销自己-=”,例如上面的ClassA,如果我们事件的注册是在ClassA内部进行的,那么它就只能注册自己内部的方法到事件上。另外,外界也不能主动地触发一个事件。事件只能add、remove自己,不能赋值。也就是说事件只能+=、-=,不能= 。当我们反编译以上例子的源程序的时候,我们可以发现事件内部就是一个private的委托和add、remove两个方法 (如下图所示)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值