В MATLAB® свойства могут иметь открытый доступ. Поэтому свойства могут обеспечить доступ к данным, которые проект класса представляет пользователям.
Используйте методы доступа свойства, чтобы обеспечить проверку ошибок или реализовать побочные эффекты, следующие из доступа к свойству. Примеры методов доступа включают функции, которые обновляют другие значения свойств при установке свойства или переводят формат значения свойства прежде, чем возвратить значение.
Можно использовать валидацию свойства, чтобы ограничить размер, класс и другие аспекты значений свойств. Для получения информации о валидации свойства см. Проверку значений свойств.
Методы доступа к свойствам действительно добавляют издержки вызова функции, получая доступ к значениям свойств. Если критический по отношению к производительности доступ к свойствам происходит в методах класса, задайте частные свойства, чтобы сохранить значения. Используйте эти значения в методах без любой проверки ошибок. Для менее частого доступа снаружи класса задайте общедоступные свойства Dependent
, которые используют методы доступа для проверки ошибок.
Для получения информации о методах доступа, используемых со свойствами Dependent
, смотрите Набор и методы get для Dependent Properties.
Методы доступа к свойствам выполняют определенный код каждый раз, когда значение свойства запрошено или присвоило значение. Эти методы позволяют вам выполнить различные операции:
Выполните код прежде, чем присвоить значения свойств, чтобы выполнить действия, такие как:
Введите ограничения диапазона значений (Проверка значений свойств)
Проверяйте на соответствующие типы и размерности
Обеспечьте обработку ошибок
Выполните код прежде, чем возвратить текущие значения свойств выполнить действия, такие как:
Вычислите значение свойств, которые не хранят значения (см., Вычисляют Данные по требованию),
Измените значение других свойств
Триггерные события (см. Обзор событий и Прослушиватели),
Чтобы управлять, какой код может получить доступ к свойствам, см. Атрибуты свойств.
Вы не можете вызвать методы доступа свойства непосредственно. MATLAB вызывает эти методы когда вы доступ к значениям свойств.
Методы доступа к свойствам выполняются автоматически каждый раз, когда вы устанавливаете или запрашиваете соответствующие значения свойств снаружи метода доступа. MATLAB не вызывает методы доступа рекурсивно. Таким образом, MATLAB не вызывает метод установки при установке свойства из его метода установки. Точно так же MATLAB не вызывает получить метод при запросе значения свойства из получать метод.
Получите указатель на функцию для набора и получите методы доступа от объекта свойства meta.property
.
Свойства meta.property
SetMethod
и GetMethod
содержат указатели на функцию, которые обращаются к этим методам.
Методы доступа свойства Define только:
Для конкретных свойств (то есть, свойства, которые не абстрактны),
В классе, который задает свойство (если свойство не абстрактно в том классе, в этом случае конкретный подкласс должен задать метод доступа).
MATLAB не имеет никакого набора по умолчанию, или получите методы доступа свойства. Поэтому, если вы не делаете методов доступа свойства define, программное обеспечение MATLAB не вызывает методов прежде, чем присвоить или возвратить значения свойств.
После того, как заданный, только набор и добирается, методы могут установить и запросить фактические значения свойств. Смотрите, Когда Метод установки Называется для получения информации о случаях, где MATLAB не вызывает методы набора свойств.
Набор свойств и добирается, методы доступа не эквивалентны вызываемому пользователем set
, и методы get
раньше устанавливали и запрашивали значения свойств от экземпляра класса. Смотрите, что Реализация Устанавливает/Получает Интерфейс для Свойств для получения информации о вызываемом пользователем set
и методах get
.
Можно установить и получить значения свойств только из набора свойств или получить метод доступа. Вы не можете вызвать другую функцию от набора или получить метод и попытку получить доступ к значению свойства от этой функции.
Например, анонимная функция, которая вызывает другую функцию, чтобы сделать фактическую работу, не может получить доступ к значению свойства. Точно так же функция доступа не может вызвать другую функцию, чтобы получить доступ к значению свойства.
Методы доступа имеют специальные имена, которые включают имя свойства. Поэтому
выполняется каждый раз, когда get.PropertyName
ссылаются, и на PropertyName
выполняется каждый раз, когда set.PropertyName
присвоен значение. PropertyName
Методы доступа свойства Define в блоке методов, который не задает атрибутов. Вы не можете вызвать эти методы непосредственно. MATLAB вызывает эти методы, когда любой код получает доступ к свойствам.
Методы доступа к свойствам не появляются в списке методов класса, возвращенных командой methods
, и не включены в свойство Methods
объекта meta.class
.
Объект свойства meta.property
содержит указатели на функцию к набору свойств, и получите методы. SetMethod
содержит указатель на функцию к методу установки. GetMethod
содержит указатель на функцию к получить методу.
Получите эти указатели из объекта meta.property
:
mc = ?ClassName;
mp = findobj(mc.PropertyList,'Name','PropertyName
');
fh = mp.GetMethod;
Например, если класс, MyClass
задает получить метод для своего свойства Text
, можно получить указатель на функцию к этой функции от объекта meta.class
:
mc = ?MyClass; mp = findobj(mc.PropertyList,'Name','Text'); fh = mp.GetMethod;
Возвращенное значение, fh
, содержит указатель на функцию к получить методу, заданному для заданного имени свойства заданного класса.
Для получения информации об определении указателей на функцию см. Создание указателя на функцию
Программное обеспечение MATLAB генерирует события до и после набора, и получите операции. Можно использовать эти события, чтобы сообщить прослушивателям, что на значения свойств сослались или присвоили. Синхронизация генерации события следующие:
PreGet
— Инициированный прежде, чем вызвать свойство получают метод
PostGet
— Инициированный после свойства добираются, метод возвратил свое значение
Если класс вычисляет значение свойства (Dependent = true
), то поведения его событий набора похожи на получить события:
PreSet
— Инициированный прежде, чем вызвать метод набора свойств
PostSet
— Инициированный после вызова метода набора свойств
Если свойство не вычисляется (Dependent = false
, значение по умолчанию), то оператор присваивания с методом установки генерирует события:
PreSet
— Инициированный прежде, чем присвоить новое значение свойства в методе установки
PostSet
— Инициированный после присвоения нового значения свойства в методе установки
Для получения информации об использовании событий свойства смотрите, Создают Прослушиватели Свойства.
Можно использовать индексацию массива со свойствами, которые содержат массивы, не вмешиваясь в набор свойств и получают методы.
Для индексируемой ссылки:
val = obj.PropName(n);
MATLAB вызывает получить метод, чтобы получить значение, на которое ссылаются.
Для индексируемого присвоения:
obj.PropName(n) = val;
MATLAB:
Вызывает получить метод, чтобы получить значение свойства
Выполняет индексируемое присвоение на возвращенном свойстве
Передает новое значение свойства методу установки
Когда ссылка или присвоение происходят на объектном массиве, 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