俗话说得好,在家靠父母,出门靠朋友,编程靠委托(Delegate)!从这句俗话就能看出父母、朋友还有委托的重要性!......好吧,最后一句是我瞎编的,虽然我们在进行C#开发过程中往往少不了委托,但也没重要到这种地步哈!至于委托是啥,用官方的话来讲就是:
用通俗一点的话来讲就是“托人办事”,就冲这四个字,你就知道委托有多好用了!
当然,这里很明显是ILRuntime的主场,就不细说委托有多好用了,给ILRuntime点面子,我们就来讲讲ILRuntime怎么用委托吧!
二、在热更工程中定义委托在热更工程中使用委托其实是没啥区别的,平时咋用就咋用,下面举个例子:
先来定义一个类,叫做“老李”,他是宿舍的带饭人,经常会收到舍友委托帮忙带饭,所以老李长这样:
实例化一个老李出来,并让他去吃饭
运行结果:
接着我们给老李创建一个舍友,叫做“老张”,老张喜欢吃大鸡腿,物联网软件开发公司电话所以经常会去打包两只大鸡腿!所以老张长这样:
但有时候老张犯懒,刚好看到老李在宿舍里,就喊老李帮他带饭,没错,这就是托人办事——委托!
运行结果:
现在老李老张都在同一个宿舍中(都写在热更工程),我们很顺利地实现了委托,但是有一天老李和老张不在同个宿舍了,老李搬到了主工程中,老张想叫老李打包该咋办呢?
三、跨域委托我们把老李整个类移动到主工程中,然后还是运行之前的代码
接着就会报一个错:
毕竟老李老张不在一个宿舍里,老张找不到老李,想委托老李带饭指定不那么简单。
其实这跟上回讲到的跨域继承类似,这个叫“跨域委托”,从报错信息提示可以看出,我们需要给老李安排一部手机才能联系到他(注册一个委托转换器)!
四、注册委托转换器
因为委托类型是定义在老李(LaoLi)那里的,所以需要给定义的委托类型注册一个转换器,在主工程运行热更代码那里注册一个委托转换器:
接着就能顺利输出:
老张又顺利地吃到两只大鸡腿!
五、万用委托类型我们也可以直接用系统自带委托类型Action或Func代替我们自定义的委托类型,于是修改老李(LaoLi)的代码,把自定义的委托类型OthersDelegate删掉改用Action
注释掉委托转换器:
结果同样正常输出:
如果在运行时发现缺少注册某个指定类型的委托适配器或者转换器时,ILRuntime会抛出相应的异常,根据提示添加注册即可。
六、注意尽量避免跨域委托尽量使用Action以及Func这两个系统内置万用委托类型同一个参数组合的委托,只需要注册一次即可发布于:广东省