In MATLAB kann eine Klasse Methode handeln als uicontrol callback, ohne öffentlichkeit?
-
01-07-2019 - |
Frage
In MATLAB 2008a, gibt es eine Möglichkeit, eine Klasse Methode, um zu handeln wie ein uicontrol callback-Funktion, ohne die Methode public?Konzeptionell sollte die Methode nicht öffentlich, denn es sollte nie aufgerufen werden, indem ein Benutzer der Klasse.Es sollte nur aufgerufen werden, als Ergebnis ein UI-Ereignis auslösen einen Rückruf.Allerdings, wenn ich die Methode Zugriff auf private oder protected, wird der Rückruf nicht funktioniert.Meine Klasse ist abgeleitet von hgsetget und ist definiert mit dem 2008a classdef syntax.
Die uicontrol code ungefähr so aussieht:
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
Die callback-code sieht wie folgt aus:
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
Lösung
Speichern Sie die function handle der Rückruf als eine private Eigenschaft scheint zu umgehen das problem.Versuchen Sie dies:
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