Динамические свойства - добавление свойств к образцу

Что такое динамические свойства

Можно добавить свойства к образцам классов, которые получают из dynamicprops класс. Эти динамические свойства иногда называются свойствами образца. Используйте динамические свойства для присоединения временных данных к объектам или для назначения данных, которые необходимо связать с образцом класса, но не со всеми объектами этого класса.

Возможно, чтобы более чем одна программа задала динамические свойства на том же объекте. В этих случаях избегайте конфликтов по совпадению имен. Динамические имена свойства должны быть допустимыми MATLAB® идентификаторы (см. «Имена переменных») и не могут совпадать с именем метода класса.

Характеристики динамических свойств

После определения динамические свойства ведут себя во многом как определяемые классом свойства:

Задайте динамические свойства

Любой класс, который является подклассом 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

Похожие темы