Зависимые свойства не хранят данные. Значение зависимого свойства зависит от некоторого другого значения, такого как значение независимого свойства.
Зависимые свойства должны задать получать-методы-доступа (
), чтобы определить значение для свойства, когда свойство запрошено. get.PropertyName
Значения, возвращенные зависимым свойством, добираются, методы не рассматриваются при тестировании на объектное равенство с помощью isequal
и isequaln
.
Чтобы смочь установить значение зависимого свойства, свойство должно задать метод доступа набора (
). Метод доступа набора свойств обычно присваивает значение другому, независимому свойству для устройства хранения данных значения.set.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
в результате. Свойство добирается, метод может принять любые меры, необходимо в рамках метода, чтобы произвести выходное значение.
Поскольку пример свойства получает метод, смотрите, Вычисляют Данные по требованию.
Несмотря на то, что зависимое свойство не хранит свое значение, можно задать метод установки для зависимого свойства позволить коду установить свойство.
Например, предположите, что у вас есть класс, который изменяет название свойства от 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
препятствует тому, чтобы новые пользователи видели свойство.
Присвоения, сделанные из методов набора свойств, вызывают выполнение любых методов установки, заданных для устанавливаемых свойств. Смотрите Вычисляют Данные по требованию для примера.
Если вы используете зависимое свойство только, чтобы возвратить значение, то не задавайте метод доступа набора для зависимого свойства. Вместо этого установите атрибут SetAccess
зависимого свойства к private
. Например, полагайте, что следующее получает метод для свойства MaxValue
:
methods function mval = get.MaxValue(obj) mval = max(obj.BigArray(:)); end end
Этот пример использует свойство MaxValue
возвратить значение, которое это вычисляет только, когда запрошено. Для этого приложения задайте свойство MaxValue
как зависимое и частное:
properties (Dependent, SetAccess = private) MaxValue end