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