Динамические свойства - Adding Properties к экземпляру

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

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

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

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

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

Определение динамических свойств

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

Похожие темы