Можно добавлять свойства к экземплярам классов, производным от dynamicprops класс. Эти динамические свойства иногда называются свойствами экземпляра. Динамические свойства используются для присоединения временных данных к объектам или для назначения данных, которые необходимо связать с экземпляром класса, но не со всеми объектами этого класса.
Несколько программ могут определять динамические свойства одного и того же объекта. В этих случаях избегайте конфликтов имен. Динамические имена свойств должны быть допустимыми идентификаторами MATLAB ® (см. «Имена переменных») и не должны совпадать с именем метода класса .
После определения динамические свойства ведут себя так же, как свойства, определенные классом:
Задание и запрос значений динамических свойств с помощью точечной нотации. (См. раздел Назначение данных динамическому свойству.)
MATLAB сохраняет и загружает динамические свойства при сохранении и загрузке объектов, к которым они присоединены. (См. раздел Динамические свойства и динамическая загрузка.)
Определите атрибуты для динамического свойства. (см. раздел Задание атрибутов динамических свойств).
По умолчанию динамические свойства имеют 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 с динамическими свойствами не рекомендуется, поскольку эти свойства принадлежат определенным экземплярам, которые часто создаются вне методов класса. Атрибут Access динамического свойства применяется к классу экземпляра, который содержит динамическое свойство. Атрибут 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