Зависимые свойства не хранят данные. Значение зависимого свойства зависит от некоторого другого значения, такого как значение недозависимого свойства.
Зависимые свойства должны определять методы get-access (get. ), чтобы определить значение свойства при запросе свойства. PropertyName
Значения, возвращенные методами получения зависимых свойств, не рассматриваются при тестировании на равенство объектов, используя isequal и isequaln.
Чтобы иметь возможность задать значение зависимого свойства, свойство должно задать метод доступа к набору (set ). Метод доступа к набору свойств обычно присваивает значение другому, не зависимому свойству для хранения значения.PropertyName.
Для примера, Account класс возвращает значение для зависимого Balance свойство, которое зависит от значения Currency свойство. The get.Balance метод запрашивает Currency свойство перед вычислением значения для Balance свойство.
MATLAB® вызывает get.Balance метод, когда Balance свойство запрашивается. Вы не можете вызвать get.Balance явно.
Вот частичный список классов, показывающих зависимое свойство и его метод get:
classdef Account properties Currency DollarAmount end properties (Dependent) Balance end ... methods function value = get.Balance(obj) c = obj.Currency; switch c case 'E' v = obj.DollarAmount / 1.1; case 'P' v = obj.DollarAmount / 1.5; otherwise v = obj.DollarAmount; end format bank value = v; end end end
Одно из приложений метода получения свойств состоит в том, чтобы определять значение свойства только тогда, когда оно вам нужно, и избегать хранения значения. Чтобы использовать этот подход, установите свойство Dependent атрибут к true:
properties (Dependent = true) Prop end
Метод get для Prop свойство определяет значение этого свойства и присваивает его объекту из метода:
function value = get.Prop(obj)
value = calculateValue;
...
endЭтот get метод вызывает функцию или статический метод, вызываемый calculateValue для вычисления значения свойства и возвратов value в результате. Метод получения свойства может предпринять любое действие, необходимое в методе, чтобы получить выход значение.
Пример метода получения свойств см. в разделе Вычисление данных по требованию.
Несмотря на то, что зависимое свойство не хранит свое значение, можно задать метод set для зависимого свойства, чтобы разрешить коду устанавливать свойство.
Например, предположим, что у вас есть класс, который изменяет имя свойства с OldPropName на NewPropName. Можно продолжать разрешать использование старого имени, не предоставляя его новым пользователям. Чтобы поддержать старое имя свойства, задайте OldPropName зависимое свойство с наборами и методами получения:
properties NewPropName end properties (Dependent, Hidden) OldPropName end methods function obj = set.OldPropName(obj,val) obj.NewPropName = val; end function value = get.OldPropName(obj) value = obj.NewPropName; end end
Нет памяти, потраченной путем хранения как старых, так и новых значений свойств. Код, который обращается к OldPropName продолжает работать должным образом. Установка Hidden атрибут OldPropName запрещает новым пользователям просматривать свойство.
Назначения, сделанные из методов набора свойств, вызывают выполнение любых методов набора, определенных для заданных свойств. См. пример Вычисление данных по требованию.
Если вы используете зависимое свойство только для возврата значения, то не определяйте метод доступа set для зависимого свойства. Вместо этого установите SetAccess атрибут зависимого свойства к private. Например, рассмотрите следующий метод get для MaxValue свойство:
methods function mval = get.MaxValue(obj) mval = max(obj.BigArray(:)); end end
Этот пример использует MaxValue свойство, чтобы вернуть значение, которое вычисляется только при запросе. Для этого приложения задайте MaxValue свойство как зависимое и частное:
properties (Dependent, SetAccess = private) MaxValue end