主要内容

修改保存和加载过程

何时修改保存和加载过程

修改保存和加载过程的主要原因是支持类的向后和向前兼容性。金宝app考虑修改保存和加载过程,当你:

  • 重命名类

  • 删除属性

  • 定义句柄对象的循环引用,初始化顺序很重要

  • 必须使用参数调用构造函数,因此不能使用ConstructOnLoad

如何修改保存和加载过程

用于修改保存和加载过程的最通用的技术是实现loadobj,如有必要,saveobj类的方法。MATLAB®调用时执行这些方法保存负载在类的对象上。

保存函数调用你的类saveobj方法。的保存函数然后保存由saveobj方法。您可以使用saveobj返回一个修改过的对象或结构体包含属性值的。

负载调用类loadobj方法。的负载函数加载由loadobj方法导入工作区。一个loadobj方法可以修改正在加载的对象,也可以从类保存的数据重构对象saveobj方法。

实现saveobjloadobj方法

实现一个saveobj方法修改要保存的对象,然后实现loadobj方法来在加载对象时将其返回到正确的状态。

实现loadobj方法作为静态方法,因为MATLAB可以调用loadobj方法结构体而不是类的对象。

实现saveobj方法作为普通方法(也就是说,调用它需要类的实例)。

MATLAB保存对象类名以便负载可以确定哪些loadobj方法来调用saveobj方法只在结构中保存对象数据。因此,在加载对象时,MATLAB必须能够访问该类。

使用一个loadobj方法时:

  • 自保存对象以来,类定义发生了变化,要求您在加载之前修改对象。

  • 一个saveobj方法在保存操作期间修改对象,可能将数据保存在结构体.实现loadobj方法从的输出重建对象saveobj

额外的注意事项

当你决定修改默认的保存和加载过程时,请记住以下几点:

  • 如果从mat文件加载任何属性值产生错误,负载通过一项结构体loadobj.的结构体字段名对应于从文件中提取的属性名。

  • loadobj总能接受一个结构体作为输入并返回一个对象,即使没有saveobjsaveobj不返回结构体

  • 如果saveobj返回一个结构体,然后负载总是通过结构体loadobj

  • 子类对象继承超类loadobjsaveobj方法。因此,如果您不实现loadobjsaveobj方法的子类,MATLAB只调用继承的方法。

    如果一个超类实现了loadobjsaveobj方法,则子类也可以实现loadobjsaveobj方法调用超类方法。有关更多信息,请参见从类层次中保存和加载对象

  • 负载函数默认不调用构造函数。有关更多信息,请参见加载时初始化对象

相关的话题