避免物业初始化顺序依赖性

控件属性加载

如果属性值依赖的顺序可能会出现问题,其中加载设置属性值。

假设您一流的设计是这样的,两个以下为真:

  • 属性集方法改变另一个属性值。

  • 一个属性值从其他属性值来计算。

然后改变一系列的属性值后,对象的最终状态也取决于在其中设置属性的顺序。此顺序的依存关系会影响加载对象的结果。

加载功能以特定的顺序设置的属性值。这个顺序可以是在其中设置的保存对象的属性的顺序不同。其结果是,加载的对象可以有比当它被保存了对象不同的属性值。

恢复非依赖的属性

如果属性集函数更改其他属性的值,则定义依赖的该财产的属性真正。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旅行距离财产只有在其他两个属性的值取决于TotalDistanceTripMarker

通过使在加载过程中初始化的属性值时,类避免顺序依赖性旅行距离物业有关。MATLAB不保存或加载的值旅行距离属性,但确实节省和负载值用于计算两个属性旅行距离在其属性get方法。

classdefOdometer2性能TotalDistance = 0 TripMarker = 0结束性能(从属)TripDistance结束方法功能距离= get.TripDistance(OBJ)的距离= obj.TotalDistance  -  obj.TripMarker;结束结束结束

相关话题