Можно добавить свойства к образцам классов, которые получают из 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