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