exponenta event banner

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

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

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

Связанные темы