Динамические свойства - 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, добавьте динамическое свойство, чтобы хранить ваши данные о размещении. Вот простой класс, чтобы создать 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 объект.

Похожие темы