建不了的模。 发表于 2014-12-30 10:39

回调函数定义和调用

创建完听众后就可以定义听众的回调函数了,听众的回调函数可以是一个对象中的普通方法或静态方法,也可以是一个普通的函数(全局函数)。根据回调函数在不同位置处的定义,其函数参数形式有所不同。一般回调函数的定义格式如下。
(1)作为一个类的普通方法
methods
   function CallbackFunction (obj,src,evnt)
      %obj:本类实例
      %src:产生事件的对象
      %evnt:事件数据
      ...
   end
end
这时,回调函数的第一个参数obj就必须是本类对象;第二个参数src是产生事件的对象;第三个参数evnt是事件数据。
(2)作为一个类的静态方法
此时,本类对象参数obj可以缺省,形式如下:
methods (Static = true)
    function CallbackFunction (src,evnt)
      %src:产生事件的对象
      %evnt:事件数据
        ...
    end
end
(3)作为普通函数
此时,对象obj可以缺省,形式如下:
function CallbackFunction (src,evnt)
      %src:产生事件的对象
      %evnt:事件数据
      ...
end
注意:无论什么情况下,回调函数至少应有两个输入参数。
有了回调函数,接下来就是回调函数的调用问题了。根据回调函数是类的普通方法、静态方法和普通函数的不同情况,其调用格式也有差别,具体如下。
(1)如果回调函数是一个普通函数,调用格式为:
hlistener = addlistener(eventSourceObj,'MyEvent',  @CallbackFunction);
(2)如果回调函数是一个对象中的方法,则调用格式为:
hlistener = addlistener(eventSourceObj,'MyEvent',  @obj.CallbackFunction);
(3)如果回调函数是一个类中的静态方法,则调用格式为:
hlistener = addlistener(eventSourceObj,'MyEvent',  @ClassName.CallbackFunction);
另外,如果函数形式比较简单,也可用无名函数的形式调用,如:
hlistener = addlistener(eventSourceObj,'MyEvent',  @(x,y) x.^2+y.^2);
当用event.listener类的构造函数来定义听众对象时,回调函数的调用方法与addlistener一致。


w785485068 发表于 2015-1-2 15:19

支持。。。。。。。。

domodo2012 发表于 2016-10-17 09:10

学习了,好东西
页: [1]
查看完整版本: 回调函数定义和调用