動的プロパティと ConstructOnLoad
クラスの ConstructOnLoad
属性を true
に設定すると、そのクラスを読み込むときに MATLAB® がクラス コンストラクターを呼び出すようになります。MATLAB はオブジェクトを呼び出すときに動的プロパティを保存し、復元します。
クラス コンストラクターから動的プロパティを作成する場合に、そのクラスの ConstructOnLoad
属性も true
に設定していると、競合が発生することがあります。以下はその例です。
保存されたオブジェクトは、動的プロパティを含む、プロパティの名前と値を保存します。
読み込まれると新規のオブジェクトが作成され、オブジェクトが保存された時点で、すべてのプロパティが値に復元されます。
この場合、
ConstructOnLoad
属性はクラス コンストラクターを呼び出し、これが、読み込まれたプロパティと同じ名前をもつ他の動的プロパティを作成します。読み込みのシーケンスの詳細は、オブジェクトの保存と読み込みを参照してください。MATLAB は、保存された動的プロパティを読み込むことで競合を防ぎ、コンストラクターを呼び出すときに
addprop
を実行しません。
ConstructOnLoad
を使用し、クラス コンストラクターから動的プロパティを追加し、さらにコンストラクターの addprop
への呼び出しが読み込み時に実行されるようにするには、動的プロパティの Transient
属性を true
に設定します。この設定により、プロパティの保存が妨げられます。たとえば、次のようになります。
classdef (ConstructOnLoad) MyClass < dynamicprops function obj = MyClass P = addprop(obj,'DynProp'); P.Transient = true; ... end end