Сохранение и загрузка динамических свойств

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

Используйте метод 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

Похожие темы

Была ли эта тема полезной?