如果属性值依赖的顺序可能会出现问题,其中加载
设置属性值。
假设您一流的设计是这样的,两个以下为真:
属性集方法改变另一个属性值。
一个属性值从其他属性值来计算。
然后改变一系列的属性值后,对象的最终状态也取决于在其中设置属性的顺序。此顺序的依存关系会影响加载对象的结果。
该加载
功能以特定的顺序设置的属性值。这个顺序可以是在其中设置的保存对象的属性的顺序不同。其结果是,加载的对象可以有比当它被保存了对象不同的属性值。
如果属性集函数更改其他属性的值,则定义依赖的
该财产的属性真正
。MATLAB®不保存或恢复相关的属性值。
使用非依赖特性,用于存储相关的属性设置的值。随后,加载
功能恢复与被保存了相同的值非依赖的特性。该加载
因为在该属性保存的文件没有价值函数不调用相关的属性设置方法。
该里程表
类避免顺序依赖性当加载对象通过控制性能被恢复时加载:
该单位
属性是相关的。其属性设置方法设置TotalDistance
属性。因此加载
不调用单位
属性设置方法。
负载功能恢复TotalDistance
任何值它有,当你保存的对象。
classdef里程表性能(常数)ConversionFactor = 1.6结束性能TotalDistance = 0结束性能(从属)单元结束性能(ACCESS =私人)PrivateUnits ='MI'结束方法功能单位= get.Units(OBJ)单元= obj.PrivateUnits;结束功能OBJ = set.Units(OBJ,newUnits)%验证newUnits是一个字符向量开关(newUnits)案件'MI'如果STRCMP(obj.PrivateUnits,“公里”)obj.TotalDistance = obj.TotalDistance /...obj.ConversionFactor;obj.PrivateUnits = newUnits;结束案件“公里”如果STRCMP(obj.PrivateUnits,'MI')obj.TotalDistance = obj.TotalDistance *...obj.ConversionFactor;obj.PrivateUnits = newUnits;结束除此以外错误('里程表:InvalidUnits',...“单位'%s”的“不支持”。万博1manbetx,newUnits);结束结束结束结束
假设你创建的实例里程表
并设置以下属性值:
odObj =里程表;odObj.Units =“公里”;odObj.TotalDistance = 16;
当您保存对象:
ConversionFactor
不保存,因为它是一个不变
属性。
TotalDistance
被保存。
单位
不保存,因为它是一个依赖的
属性。
PrivateUnits
被保存,并且提供了对于存储的当前值单位
。
当您加载对象:
ConversionFactor
从类定义获得的。
TotalDistance
被加载。
单位
没有加载,所以它的设置方法没有被调用。
PrivateUnits
从所保存的对象加载。
如果单位
财产是不依赖的
,加载它所谓的一套方法,并导致TotalDistance
属性被重新设置。
该Odometer2
类旅行距离
财产只有在其他两个属性的值取决于TotalDistance
和TripMarker
。
通过使在加载过程中初始化的属性值时,类避免顺序依赖性旅行距离
物业有关。MATLAB不保存或加载的值旅行距离
属性,但确实节省和负载值用于计算两个属性旅行距离
在其属性get方法。
classdefOdometer2性能TotalDistance = 0 TripMarker = 0结束性能(从属)TripDistance结束方法功能距离= get.TripDistance(OBJ)的距离= obj.TotalDistance - obj.TripMarker;结束结束结束