toLua学习笔记十六——lua调用c#的委托和事件
委托委托中加函数执行委托函数委托中减函数清空委托函数
事件
事件中加函数事件中减函数事件中清空函数
首先在c#脚本中定义委托和事件
publicclassLesson{publicUnityAction del;publiceventUnityAction eventAction;publicvoidDoDel(){if(del!=null)del();}publicvoidDoEvent(){if(eventAction!=null)eventAction();}publicvoidClearEvent(){
eventAction =null;}}
委托
委托其实就是用来装函数的,要使用c#中的委托,就是用来装lua函数。
在lua中定义一个委托函数
local obj =Lesson()local fun =function()print("lua函数")end委托中加函数
lua中没有复合运算符,不能直接+=,并且如果是第一次往 委托中加函数,因为委托是nil,不能直接+,第一次要先=
obj.del = fun
obj.del = obj.del + fun
obj.del = obj.del +function()print("临时声明的函数")end执行委托函数
在tolua中,没办法直接执行obj.del(),所以要在c#中封装一层调用的成员方法,在lua中调用该方法。
obj:DoDel()委托中减函数
obj.del = obj.del - fun
obj.del = obj.del - fun
obj:DoDel()清空委托函数
obj.del =nil
obj:DoDel()
事件
首先在lua中定义一个事件函数
local fun2 =function()print("事件加的函数")end事件的使用方法和委托类似,但是因为事件要遵循c#的规则,不能直接 = ,要直接+=或者-=
事件中加函数
--obj.eventAction = fun2 会报错
obj.eventAction = obj.eventAction + fun2
obj.eventAction = obj.eventAction +function()print("事件加的匿名函数")end
obj:DoEvent()事件中减函数
obj.eventAction = obj.eventAction - fun2
obj:DoEvent()事件中清空函数
obj:ClearEvent()
obj:DoEvent()
页:
[1]