Уровень Access
фиксирован, как и на любом языке ООП, который я знаю. фундаментально в том, как класс взаимодействует с другим кодом.
Ваш единственный обходной путь - использовать Dependent
свойства класса типа matlab.mixin.SetGet
и иметь условное поведение, основанное на аргументе конструкции. Вот класс POC
для демонстрации:
Класс:
classdef POC < matlab.mixin.SetGet
properties ( Dependent = true )
prop
end
properties ( Access = private )
arg % Construction argument to dictate obj.prop behaviour
prop_ % Private stored value of prop
end
methods
function obj = POC( arg )
% constructor
obj.prop = 'some value'; % Could skip setting this if argCheck fails
obj.arg = arg;
end
% Setter and getter for "prop" property do obj.argCheck() first.
% This throws an error if the user isn't permitted to set/get obj.prop
function p = get.prop( obj )
obj.argCheck();
p = obj.prop_;
end
function set.prop( obj, p )
obj.argCheck();
obj.prop_ = p;
end
end
methods ( Access = private )
function argCheck( obj )
% This function errors if the property isn't accessible
if obj.arg == 1
error( 'Property "prop" not accessible when POC.arg == 1' );
end
end
end
end
выход
>> A = POC(1);
l>> A.prop
Error using POC/get.prop (line 17)
Property "prop" not accessible when POC.arg == 1
>> A = POC(2);
>> A.prop
ans =
'some value'