Main Content

動的プロパティと 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  

関連するトピック