В MATLAB ® свойства могут иметь открытый доступ. Поэтому свойства могут предоставлять доступ к данным, предоставляемым пользователям конструкцией класса .
Используйте методы доступа к свойствам для проверки ошибок или для реализации побочных эффектов, возникающих в результате доступа к свойствам. Примеры методов доступа включают в себя функции, которые обновляют другие значения свойств при установке свойства или преобразуют формат значения свойства перед возвращением значения.
Дополнительные сведения о синтаксисе метода доступа см. в разделе Методы получения свойств и методы набора свойств.
Проверку свойств можно использовать для ограничения размера, класса и других аспектов значений свойств. Сведения о проверке свойств см. в разделе Проверка значений свойств.
Методы доступа к свойствам добавляют издержки вызова функции при обращении к значениям свойств. Если критический для производительности доступ к свойствам происходит внутри методов класса, определите частные свойства для хранения значений. Используйте эти значения внутри методов без проверки ошибок. Для менее частого доступа извне класса определите public Dependent свойства, использующие методы доступа для проверки ошибок.
Для получения информации о методах доступа, используемых с Dependent см. раздел Задание и получение методов для зависимых свойств.
Методы доступа к свойствам выполняют определенный код при каждом запросе значения свойства или назначении ему значения. Эти методы позволяют выполнять различные операции:
Перед назначением значений свойств выполните следующие действия:
Наложение ограничений диапазона значений (проверка значений свойств)
Проверка правильности типов и размеров
Обеспечить обработку ошибок
Выполните код перед возвращением текущих значений свойств для выполнения следующих действий:
Расчет значения свойств, не хранящих значения (см. Расчет данных по требованию)
Изменение значения других свойств
Инициирование событий (см. Обзор События и прослушиватели)
Сведения о том, какой код может иметь доступ к свойствам, см. в разделе Атрибуты свойств.
Методы доступа к свойствам выполняются автоматически при каждом задании или запросе соответствующих значений свойств вне метода доступа. 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 ссылается и PropertyNameset. выполняется всякий раз, когда 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