Зависимые свойства не хранят данные. Значение зависимого свойства зависит от некоторого другого значения, такого как значение недозависимого свойства.
Зависимые свойства должны определять методы 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