Dans MATLAB, une méthode de classe peut-elle agir comme un rappel uicontrol sans être publique?
-
01-07-2019 - |
Question
Dans MATLAB 2008a, existe-t-il un moyen d'autoriser une méthode de classe à agir en tant que fonction de rappel uicontrol sans avoir à rendre la méthode publique? Conceptuellement, la méthode ne devrait pas être publique car elle ne devrait jamais être appelée par un utilisateur de la classe. Il ne doit être appelé qu'à la suite d'un événement d'interface utilisateur déclenchant un rappel. Cependant, si je configure l'accès de la méthode à privé ou protégé, le rappel ne fonctionnera pas. Ma classe est dérivée de hgsetget et est définie à l'aide de la syntaxe classdef de 2008a.
Le code uicontrol ressemble à quelque chose comme:
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
Le code de rappel ressemble à:
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
La solution
Le fait de stocker le descripteur de fonction du rappel en tant que propriété privée semble permettre de résoudre le problème. Essayez ceci:
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