exponenta event banner

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

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

Зависимые свойства должны определять методы получения доступа (get.PropertyName) для определения значения свойства при запросе свойства.

Значения, возвращаемые методами получения зависимого свойства, не учитываются при проверке равенства объектов с помощью isequal и isequaln.

Чтобы иметь возможность задать значение зависимого свойства, свойство должно определить метод доступа set (set.PropertyName). Метод доступа к набору свойств обычно присваивает значение другому, не зависимому свойству для хранения значения.

Например, Account класс возвращает значение для зависимого Balance свойство, которое зависит от значения Currency собственность. 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

Метод получения для Prop свойство определяет значение этого свойства и назначает его объекту из метода:

function value = get.Prop(obj)
   value = calculateValue;
   ...
end

Это get метод вызывает функцию или статический метод, вызываемый calculateValue для вычисления значения свойства и возврата value в результате. Метод property get может выполнить любое действие, необходимое в методе для получения выходного значения.

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

Использование методов набора с зависимыми свойствами

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

Например, предположим, что у вас есть класс, который изменяет имя свойства с OldPropName кому NewPropName. Можно разрешить использование старого имени без предоставления его новым пользователям. Для поддержки старого имени свойства определите OldPropName зависимое свойство с методами set и get:

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

Связанные темы