在MATLAB中,类方法可以在不公开的情况下充当uicontrol回调吗?
时间:2020-03-06 14:28:05 来源:igfitidea点击:
在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

