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