Установка и методы get для Dependent Properties

Зависимые свойства не хранят данные. Значение зависимого свойства зависит от некоторого другого значения, такого как значение независимого свойства.

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

Поскольку пример свойства получает метод, смотрите, Вычисляют Данные по требованию.

Когда использовать методы установки с Dependent Properties

Несмотря на то, что зависимое свойство не хранит свое значение, можно задать метод установки для зависимого свойства позволить коду установить свойство.

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

Присвоения, сделанные из методов набора свойств, вызывают выполнение любых методов установки, заданных для устанавливаемых свойств. Смотрите Вычисляют Данные по требованию для примера.

Частный набор доступ с Dependent Properties

Если вы используете зависимое свойство только, чтобы возвратить значение, то не задавайте метод доступа набора для зависимого свойства. Вместо этого установите SetAccess атрибут зависимого свойства к private. Например, полагайте, что следующее получает метод для MaxValue свойство:

methods
   function mval = get.MaxValue(obj)
      mval = max(obj.BigArray(:));
   end
end

Этот пример использует MaxValue свойство возвратить значение, которое это вычисляет только, когда запрошено. Для этого приложения задайте MaxValue свойство как зависимое и частное:

properties (Dependent, SetAccess = private)
   MaxValue
end

Похожие темы