動的プロパティ — インスタンスへのプロパティの追加
dynamicprops クラスから派生したクラスのインスタンスにプロパティを追加できます。動的プロパティを使用して、新しい一時的なプロパティをクラスの特定のインスタンスに関連付けます。動的プロパティは、そのクラスのすべてのインスタンスでは必要ではない一時的なデータを保存できます。
動的プロパティの特性
いったん定義されると、動的プロパティは、クラス定義済みのプロパティと同様に動作します。
ドット表記を使用して動的プロパティの値を設定またはクエリします。(動的プロパティの作成およびその値の設定を参照。)
MATLAB® は、動的プロパティが付加されているオブジェクトの保存時および読み込み時に動的プロパティを保存および読み込みます。(動的プロパティと ConstructOnLoadを参照。)
動的プロパティの属性の値を設定します。(動的プロパティ属性の設定を参照。)
既定では、動的プロパティの
NonCopyable属性はtrueに設定されています。(動的なプロパティをもつオブジェクトを参照。)プロパティの set と get アクセス メソッドを追加します。(動的プロパティの Set メソッドおよび Get メソッドを参照。)
動的プロパティ イベントをリスニングします。(動的プロパティのイベントを参照。)
オブジェクト配列内に含まれるオブジェクトの動的プロパティにアクセスします。(Accessing Properties and Methods in Object Arraysを参照。)
動的プロパティをもつオブジェクトを比較する場合、それらのプロパティが同じ名前と値をもっていても、関数
isequalは常にfalseを返します。動的プロパティを含むオブジェクトを比較するには、クラス用にisequalをオーバーロードします。
動的プロパティの定義
dynamicprops クラスのサブクラスである任意のクラス (これはそれ自身 handle クラスのサブクラスです) は、addprop メソッドを使用して動的プロパティを定義できます。
P = addprop(A,"PropertyName")
Aは、クラスがdynamicpropsから派生されたオブジェクトの配列です。PropertyNameは、各オブジェクトに追加する動的プロパティの名前です。Pはmatlab.metadata.DynamicPropertyオブジェクトの配列です。
動的プロパティの作成およびその値の設定
button クラスは uicontrol ボタンを作成します。button クラスは dynamicprops から継承しています。
classdef button < dynamicprops properties UiHandle end methods function obj = button obj.UiHandle = uicontrol(Style="pushbutton"); end end end
このクラスは特定のレイアウト スキームの位置データを保存するようには設計されていませんが、動的プロパティを使用してその情報をインスタンスに追加できます。インスタンス b1 を作成し、カスタム レイアウト座標を保存するために動的プロパティ myCoord をインスタンスに追加します。
b1 = button;
dynprop = b1.addprop("myCoord");
b1.myCoord = [2,3];動的プロパティには他の任意のプロパティと同様にアクセスしますが、これは、動的プロパティが定義されたインスタンス上に限られます。
b1.myCoord
ans =
2 3動的プロパティ属性の設定
プロパティ属性を設定するには、動的プロパティに関連付けられている matlab.metadata.DynamicProperty オブジェクトを使用します。たとえば、dynprop オブジェクトを使用して、動的プロパティ myCoord の Hidden 属性を true に設定します。
dynprop.Hidden = true;
プロパティの属性 Constant および Abstract は、動的プロパティには意味がなくなります。これらの属性の値を true に設定しても、効果はありません。
動的プロパティの GetAccess 属性および SetAccess 属性をメタクラス オブジェクトまたはメタクラス オブジェクトの cell 配列に設定できます。 (R2026a 以降)たとえば、myCoord 動的プロパティの GetAccess 属性を、TestClass という名前のクラスのインスタンスに制限します。
dynprop.GetAccess = ?TestClass
dynprop =
DynamicProperty with properties:
Name: 'myCoord'
Description: ''
DetailedDescription: ''
GetAccess: {[1×1 matlab.metadata.Class]}
SetAccess: 'public'
Dependent: 0
Constant: 0
Abstract: 0
Transient: 0
Hidden: 1
...アクセス権限は、動的プロパティを作成したコードではなく、動的プロパティを所有するクラスに基づいて定義されます。たとえば、前の例において、myCoord の GetAccess を TestClass に設定するということは、TestClass インスタンスのみがプロパティ値を取得できるということを意味します。myCoord を作成したコードが TestClass の一部でない場合、そのコードは読み取りアクセス権を失います。
動的プロパティの削除
matlab.metadata.DynamicProperty オブジェクトを削除して、動的プロパティを削除します。たとえば、dynprop オブジェクトを削除することで、ボタン オブジェクト b1 の myCoord プロパティを削除します。
delete(dynprop)
動的プロパティの命名
動的プロパティ名は一意である必要があり、クラスで定義されたプロパティまたはメソッドの名前と一致してはなりません。複数のプログラムで動的プロパティを同じオブジェクトに関連付けることができるため、名前の競合を避けるために一意の名前を選択してください。また、動的プロパティの名前は、有効な MATLAB 識別子 (変数名を参照) でなければならず、クラスのメソッドと同じ名前にすることもできません。次のような名前は "使用しない" でください。
クラス メソッドと同じ名前
クラス イベントと同じ名前
ピリオド (
.) を含む名前配列機能をサポートする関数の名前 (
empty、transpose、ctranspose、permute、reshape、display、disp、details、またはsort)
プロパティが動的かどうかの判別
プロパティが動的かどうかを特定するには、findprop を使用してそのプロパティのメタデータ オブジェクトを取得します。たとえば、ボタン オブジェクト b1 の myCoord プロパティのメタデータを取得するには、findprop を使用します。戻り値のクラスが matlab.metadata.DynamicProperty なので、このプロパティは動的です。
mp = findprop(b1,"myCoord");
class(mp)ans =
'matlab.metadata.DynamicProperty'