PDA

查看完整版本 : 在MATLAB中,类方法可以在不公开的情况下充当uicontrol回调吗?


poster
2019-12-07, 23:17
在MATLAB 2008a中,是否有一种方法可以允许类方法充当uicontrol回调函数,而不必将该方法公开?从概念上讲,该方法不应是公共的,因为该类的用户绝对不应调用该方法。仅应在UI事件触发回调后才调用它。但是,如果将方法的访问权限设置为私有或受保护,则回调将不起作用。我的类派生自hgsetget,并使用2008a classdef语法定义。

uicontrol代码类似于:

methods (Access = public) function this = MyClass(args) this.someClassProperty = uicontrol(property1, value1, ... , 'Callback', ... {@(src, event)myCallbackMethod(this, src, event)}); % the rest of the class constructor code end end 回调代码如下:

methods (Access = private) % This doesn't work because it's private % It works just fine if I make it public instead, but that's wrong conceptually. function myCallbackMethod(this, src, event) % do something end end 回答:
将回调函数的句柄存储为私有属性似乎可以解决此问题。尝试这个:

classdef MyClass properties handle; end properties (Access=private) callback; end methods function this = MyClass(args) this.callback = @myCallbackMethod; this.handle = uicontrol('Callback', ... {@(src, event)myCallbackMethod(this, src, event)}); end end methods (Access = private) function myCallbackMethod(this, src, event) disp('Hello world!'); end end end