Зависимые свойства не хранят данные. Значение зависимого свойства зависит от некоторого другого значения, такого как значение независимого свойства.
Зависимые свойства должны задать получать-методы-доступа (добраться.
) определить значение для свойства, когда свойство запрошено. PropertyName
Значения, возвращенные зависимым свойством, добираются, методы не рассматриваются при тестировании на объектное использование равенства isequal
и isequaln
.
Чтобы смочь установить значение зависимого свойства, свойство должно задать метод доступа набора (набор.
). Метод доступа набора свойств обычно присваивает значение другому, независимому свойству для устройства хранения данных значения.PropertyName
Например, Account
класс возвращает значение для зависимого Balance
свойство, которое зависит от значения Currency
свойство. get.Balance
метод запрашивает Currency
свойство прежде, чем вычислить значение для Balance
свойство.
MATLAB® вызывает get.Balance
метод, когда Balance
свойство запрошено. Вы не можете вызвать get.Balance
явным образом.
Вот частичный список класса, показывающего зависимое свойство и получать метод:
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
Получить метод для Prop
свойство определяет значение того свойства и присваивает его объекту из метода:
function value = get.Prop
(obj)
value = calculateValue;
...
end
Этот get
вызовы метода функциональный или статический метод под названием calculateValue
вычислить значение свойства и возвращает value
в результате. Свойство добирается, метод может принять любые меры, необходимо в рамках метода, чтобы произвести выходное значение.
Поскольку пример свойства получает метод, смотрите, Вычисляют Данные по требованию.
Несмотря на то, что зависимое свойство не хранит свое значение, можно задать метод установки для зависимого свойства позволить коду установить свойство.
Например, propertyChange
класс значения, который изменяет название свойства от OldPropName
к NewPropName
. Можно продолжить позволять использование старого названия, не отсоединяя его новым пользователям. Чтобы поддержать старое имя свойства, задайте OldPropName
как зависимое свойство с набором и получают методы. Как с независимыми свойствами, метод установки в классе значения должен возвратить модифицированный объект.
classdef propertyChange 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 end
Нет никакой памяти, потраченной впустую путем хранения и старых и новых значений свойств. Код это получает доступ к OldPropName
продолжает работать как ожидалось. Установка Hidden
атрибут OldPropName
препятствует тому, чтобы новые пользователи видели свойство.
Присвоения, сделанные из методов набора свойств, вызывают выполнение любых методов установки, заданных для устанавливаемых свойств. Смотрите Вычисляют Данные по требованию для примера.
Если вы используете зависимое свойство только, чтобы возвратить значение, то не задавайте метод доступа набора для зависимого свойства. Вместо этого установите SetAccess
атрибут зависимого свойства к private
. Например, полагайте, что следующее получает метод для MaxValue
свойство:
methods function mval = get.MaxValue(obj) mval = max(obj.BigArray(:)); end end
Этот пример использует MaxValue
свойство возвратить значение, которое это вычисляет только, когда запрошено. Для этого приложения задайте MaxValue
свойство как зависимое и частное:
properties (Dependent, SetAccess = private) MaxValue end