Можно добавить свойства к образцам классов, которые получают из dynamicprops
класс. Эти динамические свойства иногда называются свойствами образца. Используйте динамические свойства для присоединения временных данных к объектам или для назначения данных, которые необходимо связать с образцом класса, но не со всеми объектами этого класса.
Возможно, чтобы более чем одна программа задала динамические свойства на том же объекте. В этих случаях избегайте конфликтов по совпадению имен. Динамические имена свойства должны быть допустимыми MATLAB® идентификаторы (см. «Имена переменных») и не могут совпадать с именем метода класса.
После определения динамические свойства ведут себя во многом как определяемые классом свойства:
Установите и запросите значения динамических свойств с помощью записи через точку. (См. «Присвоение данных динамическому свойству».)
MATLAB сохраняет и загружает динамические свойства, когда вы сохраняете и загружаете объекты, к которым они присоединены. (См. Динамические свойства и ConstructOnLoad.)
Задайте атрибуты для динамического свойства. (См. раздел «Установка атрибутов динамических свойств»).
По умолчанию динамические свойства имеют свои NonCopyable
для атрибута задано значение true
. Если вы копируете объект, содержащий динамическое свойство, динамическое свойство не копируется. (См. объекты с динамическими свойствами»)
Добавьте набор свойств и получите методы доступа. (См. «Установка и получение методов для зависимых свойств».)
Прослушивайте динамические события свойств. (См. «Динамические события свойств».)
Доступ к значениям динамических свойств из объектных массивов с ограниченным синтаксисом. (См. Раздел «Доступ к динамическим свойствам в массивах».)
isequal
функция всегда возвращает false
при сравнении объектов, которые имеют динамические свойства, даже если свойства имеют одинаковые имя и значение. Чтобы сравнить объекты, которые содержат динамические свойства, перегрузите isequal
для вашего класса.
Любой класс, который является подклассом dynamicprops
класс (который сам по себе является подклассом handle
класс) может задать динамические свойства с помощью addprop
способ. Синтаксис:
P = addprop(H,'PropertyName')
где:
P
является массивом meta.DynamicProperty
объекты
H
- массив указателей
PropertyName
- имя динамического свойства, добавляемого к каждому объекту;
Используйте только допустимые имена при именовании динамических свойств (см. «Имена переменных»). В сложение не используйте имена, которые:
Совпадают с именем метода класса
Совпадают с именем события класса
Содержать точку (.
)
Являются ли имена функций, поддерживающих функциональность массивов: empty
, transpose
, ctranspose
, permute
, reshape
, display
, disp
, details
, или sort
.
Чтобы задать атрибуты свойств, используйте meta.DynamicProperty
объект, сопоставленный с динамическим свойством. Для примера, если P
- объект, возвращенный addprop
, этот оператор устанавливает Hidden
свойства атрибут к
true
:
P.Hidden = true;
Атрибуты свойств Constant
и Abstract
не имеют значения для динамических свойств. Установка значения этих атрибутов равной true
не имеет эффекта.
Удалите динамическое свойство путем удаления его meta.DynamicProperty
объект:
delete(P);
Предположим, вы используете предопределенный набор классов виджетов пользовательского интерфейса (кнопки, ползунки, флажки и т.д.). Необходимо хранить местоположение каждого образца класса виджета. Предположим, что классы виджета не предназначены для хранения данных о местоположении для вашей конкретной схемы размещения. Вы хотите избегать создания карты или хеш- таблица для ведения этой информации отдельно.
Принимая button
класс является подклассом dynamicprops
, добавьте динамическое свойство для хранения данных размещения. Вот простой класс, чтобы создать uicontrol
кнопка:
classdef button < dynamicprops properties UiHandle end methods function obj = button(pos) if nargin > 0 if length(pos) == 4 obj.UiHandle = uicontrol('Position',pos,... 'Style','pushbutton'); else error('Improper position') end end end end end
Создайте образец button
класс, добавить динамическое свойство и задать его значение:
b1 = button([20 40 80 20]);
b1.addprop('myCoord');
b1.myCoord = [2,3];
Доступ к динамическому свойству так же, как и к любому другому свойству, но только на объекте, на котором вы его определили:
b1.myCoord
ans = 2 3
Использование непубликационного доступа с динамическими свойствами не рекомендуется, поскольку эти свойства относятся к конкретным образцам, которые часто создаются вне методов класса. Атрибут Доступа динамического свойства применяется к классу образца, который содержит динамическое свойство. Атрибут динамического свойства Access не обязательно применяется к классу, метод которого добавляет динамическое свойство.
Например, если метод базового класса добавляет динамическое свойство с частным доступом к образцу, частный доступ применяется только к классу образца.
Для получения дополнительной информации об атрибутах динамических свойств см. meta.DynamicProperty
. Используйте указатель findprop
метод получения meta.DynamicProperty
объект.
Динамические свойства объекта можно перечислить с помощью указателя findprop
способ. Вот шаги:
Получите имена свойств объекта с помощью properties
функция.
Получите объект метаданных для каждого свойства, используя findprop
.
Используйте isa
функция для определения, является ли объект метаданных meta.DynamicProperty
объект. Если это так, то свойство является динамическим свойством.
getDynamicPropNames
функция показов, как отобразить имена любых динамических свойств, определенных для входа obj
.
function getDynamicPropNames(obj) % Find dynamic properties allprops = properties(obj); for i=1:numel(allprops) m = findprop(obj,allprops{i}); if isa(m,'meta.DynamicProperty') disp(m.Name) end end end