Используйте метод addprop
, чтобы добавить динамические свойства к классу, который выведен от класса dynamicprops
. Функция save
сохраняет динамические свойства с объектом, к которому они присоединяются. Для получения дополнительной информации о динамических свойствах смотрите Динамические свойства — Adding Properties к Экземпляру.
Когда Вы Потребность saveobj и loadobj Методы
Функция save
сохраняет динамические свойства и их значения. Однако save
не сохраняет атрибуты динамического свойства, потому что эти атрибуты не заданы в определении класса. Если вы сохраняете объект, который имеет динамические свойства со значениями атрибутов не по умолчанию, используйте saveobj
и loadobj
, чтобы справиться с сохранением и загрузкой значений атрибута.
Если динамическое свойство имеет значения атрибута не по умолчанию, преобразуйте объект в struct
в методе saveobj
. Сохраните значения атрибута динамического свойства в struct
так, чтобы метод loadobj
мог восстановить эти значения.
Реализация saveobj и loadobj Методы
Ваш метод saveobj
может получить значения атрибута не по умолчанию из объекта meta.DynamicProperty
, сопоставленного с динамическим свойством. Предположим объект, который вы сохраняете, имеет динамическое свойство под названием DynoProp
. Создайте struct
в методе saveobj
, чтобы сохранить данные что использование метода loadobj
, чтобы восстановить объект.
Вот то, как метод saveobj
работает:
Получите объект meta.DynamicProperty
для динамического свойства.
Сохраните имя и значение динамического свойства в struct
s
.
Сохраните значения атрибутов динамического свойства не по умолчанию для SetAccess
и GetAccess
в struct
. Функция loadobj
восстанавливает эти значения.
methods function s = saveobj(obj) metaDynoProp = findprop(obj,'DynoProp'); s.dynamicprops(1).name = metaDynoProp.Name; s.dynamicprops(1).value = obj.DynoProp; s.dynamicprops(1).setAccess = metaDynoProp.SetAccess; s.dynamicprops(1).getAccess = metaDynoProp.GetAccess; ... end end
Ваш метод loadobj
может добавить динамическое свойство и установить значения атрибута:
Создайте экземпляр класса.
Используйте addprop
, чтобы добавить новое динамическое свойство к объекту.
Восстановите атрибуты динамического свойства.
methods (Static) function obj = loadobj(s) if isstruct(s) obj = ClassConstructor; ... metaDynoProp = addprop(obj,s.dynamicprops(1).name); obj.(s.dynamicprops(1).name) = s.dynamicprops(1).value; metaDynoProp.SetAccess = s.dynamicprops(1).setAccess; metaDynoProp.GetAccess = s.dynamicprops(1).getAccess; end end end