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

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

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

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

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

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

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

Любой класс, который является подклассом класса dynamicprops (который является самостоятельно подклассом класса handle) может задать динамические свойства с помощью метода addprop. Синтаксис:

P = addprop(H,'PropertyName')

где:

P является массивом объектов meta.DynamicProperty

H является массивом указателей

PropertyName является именем динамического свойства, которое вы добавляете в каждый объект

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

Используйте только допустимые имена при именовании динамических свойств (см. Имена переменных). Кроме того, не используйте имена что:

  • Совпадают с именем метода класса

  • Совпадают с именем события класса

  • Содержите период (.)

Установка атрибутов динамического свойства

Чтобы установить атрибуты свойства, используйте объект 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

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

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

Например, если метод базового класса добавляет динамическое свойство с частным доступом к экземпляру, частный доступ применяется только к классу экземпляра.

Для получения дополнительной информации об атрибутах динамического свойства смотрите meta.DynamicProperty. Используйте указатель метод findprop, чтобы получить объект meta.DynamicProperty.

Похожие темы