Основная причина изменения сохранения и процесса загрузки должна поддержать обратную и прямую совместимость классов. Рассмотрите изменение сохранения и загрузите процесс когда вы:
Переименуйте класс
Удалите свойства
Задайте циклическую ссылку объектов указателя, где порядок инициализации важен
Должен вызвать конструктора с аргументами и, поэтому, не может использовать ConstructOnLoad
Самый универсальный метод для изменения сохранения и процесса загрузки должен реализовать loadobj
, и при необходимости, методы saveobj
для вашего класса. MATLAB® выполняет эти методы, когда вы вызываете save
или load
на объекте класса.
Вызовы функции save
ваш класс метод saveobj
прежде, чем выполнить операцию сохранения. Функция save
затем сохраняет значение, возвращенное методом saveobj
. Можно использовать saveobj
, чтобы возвратить измененный объект или struct
, который содержит значения свойств.
load
вызывает ваш класс метод loadobj
после загрузки объекта. Функция load
загружает значение, возвращенное методом loadobj
в рабочую область. Метод loadobj
может изменить объектное загружение или может восстановить объект от данных, сохраненных классом метод saveobj
.
Реализация saveobj и loadobj Методы
Реализуйте метод saveobj
, который изменяет объект, являющийся сохраненным, затем реализуйте метод loadobj
, чтобы возвратить объект в правильное состояние при загрузке его.
Реализуйте метод loadobj
как метод Static
, потому что MATLAB может вызвать метод loadobj
с struct
вместо объекта класса.
Реализуйте метод saveobj
как обычный метод (то есть, вызывание его требует экземпляра класса).
MATLAB сохраняет имя класса объекта так, чтобы load
мог определить, какой метод loadobj
вызвать в случаях, где ваш метод saveobj
сохраняет только данные объектов в структуре. Поэтому класс должен быть доступен для MATLAB, когда вы загружаете объект.
Используйте метод loadobj
когда:
Определение класса изменилось, поскольку объект был сохранен, требуя, чтобы вы изменили объект перед загрузкой.
Метод saveobj
изменил объект во время операции сохранения, возможно сохранив данные в struct
. Реализуйте метод loadobj
, чтобы восстановить объект от вывода saveobj
.
Когда вы решите изменить сохранение по умолчанию и процесс загрузки, помните о следующих моментах:
Если загрузка любого значения свойства из MAT-файла производит ошибку, load
передает struct
loadobj
. Имена полей struct
соответствуют именам свойства, извлеченным из файла.
loadobj
должен всегда мочь принять struct
как вход и возвратить объект, даже если нет никакого saveobj
, или saveobj
не возвращает struct
.
Если saveobj
возвращает struct
, то load
всегда передает тот struct
loadobj
.
Объекты подкласса наследовали суперкласс методы saveobj
и loadobj
. Поэтому, если вы не реализуете loadobj
или метод saveobj
в подклассе, MATLAB вызывает только унаследованные методы.
Если суперкласс реализует loadobj
или метод saveobj
, то подкласс может также реализовать loadobj
или метод saveobj
, который вызывает методы суперкласса. Для получения дополнительной информации смотрите, Избавляют и Объекты Загрузки от Иерархий классов.
Функция load
не вызывает конструктора по умолчанию. Для получения дополнительной информации смотрите, Инициализируют Объекты При Загрузке.