メインコンテンツ

動的プロパティ — インスタンスへのプロパティの追加

dynamicprops クラスから派生したクラスのインスタンスにプロパティを追加できます。動的プロパティを使用して、新しい一時的なプロパティをクラスの特定のインスタンスに関連付けます。動的プロパティは、そのクラスのすべてのインスタンスでは必要ではない一時的なデータを保存できます。

動的プロパティの特性

いったん定義されると、動的プロパティは、クラス定義済みのプロパティと同様に動作します。

動的プロパティの定義

dynamicprops クラスのサブクラスである任意のクラス (これはそれ自身 handle クラスのサブクラスです) は、addprop メソッドを使用して動的プロパティを定義できます。

P = addprop(A,"PropertyName")
  • A は、クラスが dynamicprops から派生されたオブジェクトの配列です。

  • PropertyName は、各オブジェクトに追加する動的プロパティの名前です。

  • Pmatlab.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 オブジェクトを使用して、動的プロパティ myCoordHidden 属性を 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
                  ...

アクセス権限は、動的プロパティを作成したコードではなく、動的プロパティを所有するクラスに基づいて定義されます。たとえば、前の例において、myCoordGetAccessTestClass に設定するということは、TestClass インスタンスのみがプロパティ値を取得できるということを意味します。myCoord を作成したコードが TestClass の一部でない場合、そのコードは読み取りアクセス権を失います。

動的プロパティの削除

matlab.metadata.DynamicProperty オブジェクトを削除して、動的プロパティを削除します。たとえば、dynprop オブジェクトを削除することで、ボタン オブジェクト b1myCoord プロパティを削除します。

delete(dynprop)

動的プロパティの命名

動的プロパティ名は一意である必要があり、クラスで定義されたプロパティまたはメソッドの名前と一致してはなりません。複数のプログラムで動的プロパティを同じオブジェクトに関連付けることができるため、名前の競合を避けるために一意の名前を選択してください。また、動的プロパティの名前は、有効な MATLAB 識別子 (変数名を参照) でなければならず、クラスのメソッドと同じ名前にすることもできません。次のような名前は "使用しない" でください。

  • クラス メソッドと同じ名前

  • クラス イベントと同じ名前

  • ピリオド (.) を含む名前

  • 配列機能をサポートする関数の名前 (emptytransposectransposepermutereshapedisplaydispdetails、または sort)

プロパティが動的かどうかの判別

プロパティが動的かどうかを特定するには、findprop を使用してそのプロパティのメタデータ オブジェクトを取得します。たとえば、ボタン オブジェクト b1myCoord プロパティのメタデータを取得するには、findprop を使用します。戻り値のクラスが matlab.metadata.DynamicProperty なので、このプロパティは動的です。

mp = findprop(b1,"myCoord");
class(mp)
ans =

    'matlab.metadata.DynamicProperty'

参考

トピック