Если вы перегрузите все методы подкласса в скрытом блоке методов, я думаю, что он будет делать именно то, что вы ищете.
Я не уверен, в каких версиях Matlab это работает, но этоопределенно работает для меня в R2012b.
Исключение составляет isvalid
, поскольку оно запечатано, поэтому вы не можете переопределить его в подклассе дескриптора.
classdef handle_light < handle
methods(Hidden)
function lh = addlistener(varargin)
lh = addlistener@handle(varargin{:});
end
function notify(varargin)
notify@handle(varargin{:});
end
function delete(varargin)
delete@handle(varargin{:});
end
function Hmatch = findobj(varargin)
Hmatch = findobj@handle(varargin{:});
end
function p = findprop(varargin)
p = findprop@handle(varargin{:});
end
function TF = eq(varargin)
TF = eq@handle(varargin{:});
end
function TF = ne(varargin)
TF = ne@handle(varargin{:});
end
function TF = lt(varargin)
TF = lt@handle(varargin{:});
end
function TF = le(varargin)
TF = le@handle(varargin{:});
end
function TF = gt(varargin)
TF = gt@handle(varargin{:});
end
function TF = ge(varargin)
TF = ge@handle(varargin{:});
end
function TF = isvalid(varargin)
TF = isvalid@handle(varargin{:});
end
end
end
Если вы сохраните вышеупомянутый классдля handle_light.m, а затем введите methods handle_light
в командном окне, вы получите следующий результат:
Methods for class handle_light:
handle_light isvalid
Класс Test становится:
classdef Test < handle_light
methods
function myFunction(obj)
end
end
end
Делая это таким образомозначает, что вам не нужно помещать перегрузки в класс Test, который поддерживает порядок.