Можно добавить свойства в экземпляры классов, которые выводят от класса dynamicprops
. Эти динамические свойства иногда упоминаются как свойства экземпляра. Используйте динамические свойства, чтобы присоединить временные данные к объектам или присвоить данные, которые вы хотите сопоставить с экземпляром класса, но не всеми объектами того класса.
Больше чем для одной программы возможно задать динамические свойства на том же объекте. В этих случаях избегайте конфликтов по совпадению имен. Имена динамического свойства должны быть допустимыми идентификаторами MATLAB® (см. Имена переменных), и не может быть то же имя как метод класса.
После того, как заданный, динамические свойства ведут себя во многом как заданные классом свойства:
Установите и запросите значения динамических свойств с помощью записи через точку. (См. Данные о Присвоении к Динамическому свойству.)
MATLAB сохраняет и загружает динамические свойства, когда вы сохраняете и загружаете объекты, к которым они присоединяются. (См. Динамические свойства и ConstructOnLoad.)
Задайте атрибуты для динамического свойства. (См. Атрибуты Динамического свойства Набора).
По умолчанию динамические свойства имеют свой набор атрибута NonCopyable
к true
. Если вы копируете объект, содержащий динамическое свойство, динамическое свойство не копируется. (См. Объекты с Динамическими свойствами),
Добавьте набор свойств и получите методы доступа. (См. Набор и методы get для Зависимых Свойств.)
Прислушайтесь к событиям динамического свойства. (См. События Динамического свойства.)
Доступ к значениям динамического свойства от массивов объектов, с ограниченным синтаксисом. (См. Динамические свойства Доступа в Массивах.)
Функция isequal
всегда возвращает false
при сравнении объектов, которые имеют динамические свойства, даже если свойства имеют то же имя и значение. Сравнить объекты, которые содержат динамические свойства, перегрузка isequal
для вашего класса.
Любой класс, который является подклассом класса 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
.