Установите и получите методы для зависимых свойств

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

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

Несмотря на то, что зависимое свойство не хранит свое значение, можно задать метод 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

Похожие темы