Можно добавить свойства в экземпляры классов, которые выводят из dynamicprops класс. Эти динамические свойства иногда упоминаются как свойства экземпляра. Используйте динамические свойства, чтобы присоединить временные данные к объектам или присвоить данные, которые вы хотите сопоставить с экземпляром класса, но не всеми объектами того класса.
Больше чем для одной программы возможно задать динамические свойства на том же объекте. В этих случаях избегайте конфликтов по совпадению имен. Именами динамического свойства должен быть допустимый MATLAB® идентификаторы (см. Имена переменных) и не могут быть тем же именем как метод класса.
После того, как заданный, динамические свойства ведут себя во многом как заданные классом свойства:
Установите и запросите значения динамических свойств с помощью записи через точку. (См. Данные о Присвоении к Динамическому свойству.)
MATLAB сохраняет и загружает динамические свойства, когда вы сохраняете и загружаете объекты, к которым они присоединяются. (См. Динамические свойства и ConstructOnLoad.)
Задайте атрибуты для динамического свойства. (См. Атрибуты Динамического свойства Набора).
По умолчанию динамические свойства имеют свой NonCopyable припишите набор true. Если вы копируете объект, содержащий динамическое свойство, динамическое свойство не копируется. (См. Объекты с Динамическими свойствами),
Добавьте набор свойств и получите методы доступа. (См. Набор и методы get для Зависимых Свойств.)
Прислушайтесь к событиям динамического свойства. (См. События Динамического свойства.)
Доступ к значениям динамического свойства от массивов объектов, с ограниченным синтаксисом. (См. Динамические свойства Доступа в Массивах.)
isequal функционируйте всегда возвращает false при сравнении объектов, которые имеют динамические свойства, даже если свойства имеют то же имя и значение. Сравнить объекты, которые содержат динамические свойства, перегрузку isequal для вашего класса.
Любой класс, который является подклассом dynamicprops класс (который является самостоятельно подклассом handle класс), может задать динамические свойства с помощью addprop метод. Синтаксис:
P = addprop(H,'PropertyName')где:
P массив meta.DynamicProperty объекты
H массив указателей
PropertyName имя динамического свойства, которое вы добавляете в каждый объект
Используйте только допустимые имена при именовании динамических свойств (см. Имена переменных). Кроме того, не используйте имена что:
Совпадают с именем метода класса
Совпадают с именем события класса
Содержите период (.)
Имена функции, которые поддерживают функциональность массивов: emptyперемещениеctranspose,'перестановкаизменениеОтображениеdispдетали, или sort.
Чтобы установить атрибуты свойства, используйте meta.DynamicProperty объект сопоставлен с динамическим свойством. Например, если P объект, возвращенный addprop, этот оператор устанавливает Hidden свойства припишите true:
P.Hidden = true;
Свойство приписывает Constant и Abstract не имейте никакого значения для динамических свойств. Устанавливание значения этих атрибутов к true не оказывает влияния.
Удалите динамическое свойство путем удаления его meta.DynamicProperty объект:
delete(P);
Предположим, вы используете предопределенный набор классов виджета пользовательского интерфейса (кнопки, ползунки, флажки, и т.д.). Вы хотите сохранить местоположение каждого экземпляра класса виджета. Примите, что классы виджета не спроектированы, чтобы хранить данные о местоположении для вашей конкретной схемы размещения. Вы не хотите создавать карту или хэш-таблицу, чтобы обеспечить эту информацию отдельно.
Принятие button класс является подклассом dynamicprops, добавьте динамическое свойство, чтобы хранить ваши данные о размещении. Вот простой класс, чтобы создать a 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Используя непубличный доступ с динамическими свойствами не рекомендуется, потому что эти свойства принадлежат определенным экземплярам, которые часто создаются за пределами методов класса. Доступ к атрибуту динамического свойства применяется к классу экземпляра, который содержит динамическое свойство. Доступ к динамическому свойству к атрибуту не обязательно применяется к классу, метод которого добавляет динамическое свойство.
Например, если метод базового класса добавляет динамическое свойство с частным доступом к экземпляру, частный доступ применяется только к классу экземпляра.
Для получения дополнительной информации об атрибутах динамического свойства смотрите 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