exponenta event banner

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

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

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

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

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

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

Соображения по производительности с помощью методов доступа

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

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

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

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

  • Перед назначением значений свойств выполните следующие действия:

    • Наложение ограничений диапазона значений (проверка значений свойств)

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

Сведения об определении дескрипторов функций см. в разделе Создание дескриптора функций.

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

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

  • PreGet - Срабатывает перед вызовом метода получения свойства

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

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

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

  • PostSet - Инициируется после вызова метода набора свойств

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

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

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

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

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

Индексирование массива можно использовать со свойствами, содержащими массивы, без вмешательства в набор свойств и методы получения.

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

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

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