Методы доступа к свойствам

Свойства обеспечивают доступ к данным классов

В MATLAB®свойства могут иметь открытый доступ. Поэтому свойства могут предоставить доступ к данным, которые проект класса предоставляет пользователям.

Используйте методы доступа к свойствам для проверки ошибок или реализации побочных эффектов, возникающих в результате доступа к свойствам. Примеры методов доступа включают функции, которые обновляют другие значения свойств при установке свойства или преобразуют формат значения свойства перед возвращением значения.

Для получения дополнительной информации о синтаксисе метода доступа смотрите Методы получения свойств и Методы набора свойств.

Можно использовать валидацию свойств, чтобы ограничить размер, класс и другие аспекты значений свойств. Для получения информации о валидации свойств см. Раздел «Валидация значений свойств».

Факторы о эффективности с помощью методов доступа

Методы доступа к свойствам добавляют накладные расходы на вызов функции всякий раз, когда обращаются к значениям свойств. Если критический для производительности доступ к свойствам происходит внутри методов класса, задайте частную собственность для хранения значений. Используйте эти значения внутри методов без какой-либо проверки ошибок. Для менее частого доступа из-за пределов класса задайте общие Dependent свойства, которые используют методы доступа для проверки ошибок.

Для получения информации о методах доступа, используемых с Dependent свойства, см. «Установка и получение методов для зависимых свойств».

Набор свойств и получение методов

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

  • Выполните код перед назначением значений свойств для выполнения таких действий, как:

    • Наложение ограничений на область значений значений (валидация значений свойств)

    • Проверьте правильность типов и размерностей

    • Обеспечьте обработку ошибок

  • Выполните код перед возвратом текущих значений свойств для выполнения таких действий, как:

Чтобы контролировать, какой код может получить доступ к свойствам, смотрите Атрибуты свойств.

Когда MATLAB вызывает методы доступа

Методы доступа к свойствам выполняются автоматически каждый раз, когда вы задаете или запрашиваете соответствующие значения свойств вне метода доступа. MATLAB не вызывает рекурсивные методы доступа. То есть MATLAB не вызывает метод set при установке свойства из метода set этого свойства, независимо от того, какой образец класса изменяется. Точно так же MATLAB не вызывает метод get при запросе значения свойства из собственного метода get этого свойства.

Примечание

Вы не можете вызвать методы доступа к свойствам напрямую. MATLAB вызывает эти методы, когда вы получаете доступ к значениям свойств.

Получите указатель на функцию для набора и получите методы доступа из свойства meta.property объект. The meta.property SetMethod и GetMethod свойства содержат указатели на функцию, которые ссылаются на эти методы.

Ограничения на методы доступа

Задайте только методы доступа к свойствам:

  • Для свойств бетона (то есть свойств, которые не являются абстрактными)

  • Внутри класса, который задает свойство (если свойство не является абстрактным в этом классе, в этом случае конкретный подкласс должен определять метод доступа).

MATLAB не имеет набора по умолчанию или методов доступа к свойствам. Поэтому, если вы не задаете методы доступа к свойствам, программное обеспечение MATLAB не вызывает никаких методов перед назначением или возвращением значений свойств.

После определения только методы set и get могут устанавливать и запрашивать значения фактических свойств. Смотрите, когда вызывается метод Set для получения информации о случаях, когда MATLAB не вызывает методы набора свойств.

Примечание

Набор свойств и методы получения доступа не эквивалентны вызываемым пользователем set и get методы, используемые для задания и запроса значений свойств из образца класса. Смотрите Implement Set/Get Interface для свойств для получения информации о вызываемых пользователями set и get методы.

Методы доступа не могут вызвать функции для доступа к свойствам

Вы можете задать и получить значения свойств только из набора свойств или получить метод доступа. Вы не можете вызвать другую функцию из аппарата или получить метод и попытаться получить доступ к значению свойства из этой функции.

Например, анонимная функция, которая вызывает другую функцию, чтобы выполнить фактическую работу, не может получить доступ к значению свойства. Точно так же функция доступа не может вызвать другую функцию для доступа к значению свойства.

Определение методов доступа

Методы доступа имеют специальные имена, включая имя свойства. Поэтому получите PropertyName. выполняется всякий раз, когда PropertyName ссылка и набор PropertyName. выполняется всякий раз, когда PropertyName присваивается значение.

Задайте методы доступа к свойствам в блоке Methods, который не задает атрибуты. Вы не можете вызвать эти методы напрямую. MATLAB вызывает эти методы, когда любой код обращается к свойствам.

Методы доступа к свойствам не появляются в списке методов классов, возвращенных methods и не включены в meta.class Methods объекта свойство.

Метод доступа к Указателям на функции

Свойство meta.property объект содержит указатели на функцию для набора свойств и методов get. SetMethod содержит указатель на функцию для метода set. GetMethod содержит указатель на функцию для метода get.

Получите эти указатели из meta.property объект:

mc = ?ClassName;
mp = findobj(mc.PropertyList,'Name','PropertyName');
fh = mp.GetMethod;

Для примера, если класс MyClass задает метод get для его Text свойство, вы можете получить указатель на функцию этой функции от meta.class объект:

mc = ?MyClass;
mp = findobj(mc.PropertyList,'Name','Text');
fh = mp.GetMethod;

Возвращенное значение, fh, содержит указатель на функцию для метода get, заданного для заданного имени свойства для заданного класса.

Для получения информации об определении указателей на функцию см. Раздел «Создание указателя на функцию»

Set и get метод выполнение и события свойств

MATLAB генерирует события до и после установки и получения операций. Можно использовать эти события, чтобы информировать прослушиватели о том, что значения свойств были ссыланы или назначены. Время генерации события следующее:

  • PreGet - срабатывает перед вызовом метода get свойства

  • PostGet - срабатывает после того, как метод получения свойства вернет свое значение

Если класс вычисляет значение свойства (Dependent = true), тогда поведение его установленных событий подобно событиям get:

  • PreSet - срабатывает перед вызовом метода набора свойств

  • PostSet - срабатывает после вызова метода набора свойств

Если свойство не вычислено (Dependent = false, по умолчанию), затем оператор назначения с методом set генерирует события:

  • PreSet - Инициируется перед присвоением нового значения свойства в методе set

  • PostSet - срабатывает после присвоения нового значения свойства в методе set

Дополнительные сведения об использовании событий свойств см. в разделе Создание прослушивателей свойств.

Методы и свойства доступа, содержащие массивы

Можно использовать индексацию массива со свойствами, которые содержат массивы, не вмешиваясь в набор свойств и методы get.

Для индексированной ссылки:

val = obj.PropName(n);

MATLAB вызывает метод get, чтобы получить ссылочное значение.

Для индексированного назначения:

obj.PropName(n) = val;

MATLAB:

  • Вызывает метод get, чтобы получить значение свойства

  • Выполняет индексированное назначение возвращаемого свойства

  • Передает новое значение свойства в метод set

Методы доступа и массивы объектов

Когда ссылка или назначение происходит в объектном массиве, MATLAB вызывает аппарат и получает методы в цикле. В этом цикле MATLAB всегда передает скалярные объекты, чтобы задать и получить методы.

Изменение значений свойств с помощью методов доступа

Методы доступа к свойствам применяются в тех случаях, когда необходимо выполнить несколько дополнительных шагов перед назначением или возвращением значения свойства. Для примера, Testpoint класс использует метод набора свойств, чтобы проверить область значений значений. Затем применяется масштабирование, если оно находится в определенной области значений, и задается значение NaN если нет.

Методы получения свойств применяют коэффициент шкалы перед возвращением его текущего значения:

classdef Testpoint
   properties
      expectedResult = []
   end
   properties(Constant)
      scalingFactor = 0.001
   end
   methods
      function obj = set.expectedResult(obj,erIn)
         if erIn >= 0 && erIn <= 100
            erIn = erIn.*obj.scalingFactor;
            obj.expectedResult = erIn;
         else
            obj.expectedResult = NaN;
         end
      end
      function er = get.expectedResult(obj)
         er = obj.expectedResult/obj.scalingFactor;
      end
   end
end

Похожие темы