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

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

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

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

Чтобы смочь установить значение зависимого свойства, свойство должно задать метод доступа набора (set.PropertyName 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

Похожие темы

Была ли эта тема полезной?