Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

依存プロパティの set および get メソッド

依存プロパティにはデータが保存されません。依存プロパティの値は、非依存プロパティの値などの他の値に依存します。

依存プロパティでは、プロパティがクエリされたときにプロパティの値が決定されるよう、get アクセス メソッド (get.PropertyName) を定義しなければなりません。

依存プロパティの get メソッドから返される値は、isequalisequaln を使用してオブジェクトの等価性をテストする際に考慮されません。

依存プロパティの値を設定できるようにするには、そのプロパティで set アクセス メソッド (set.PropertyName) を定義しなければなりません。プロパティの set アクセス メソッドは、通常、値を保管するために別の非依存プロパティに値を代入します。

たとえば、Account クラスは、Currency プロパティの値に依存する依存プロパティ Balance の値を返します。get.Balance メソッドは、Balance プロパティの値を計算する前に Currency プロパティをクエリします。

Balance プロパティがクエリされると、MATLAB®get.Balance メソッドを呼び出します。get.Balance を明示的に呼び出すことはできません。

以下に、依存プロパティとその get メソッドを含むクラスの記述の一部を示します。

classdef Account
   properties
      Currency
      DollarAmount
   end
   properties (Dependent)
      Balance
   end
   ...
   methods
      function value = get.Balance(obj)
         c = obj.Currency;
         switch c
            case 'E'
               v = obj.DollarAmount / 1.1;
            case 'P'
               v = obj.DollarAmount / 1.5;
            otherwise
               v = obj.DollarAmount;
         end
         format bank
         value = v;
      end
   end
end

依存プロパティ値の計算

プロパティの get メソッドの 1 つの使用方法として、必要な場合のみプロパティ値を決定し、値を保存しないように設定する方法が挙げられます。この手法を使用するには、プロパティの Dependent 属性を true に設定します。

properties (Dependent = true)
   Prop
end

Prop プロパティの get メソッドはプロパティの値を判定し、メソッド内からオブジェクトへの代入を行います。

function value = get.Prop(obj)
   value = calculateValue;
   ...
end

この get メソッドは、calculateValue という名前の関数または静的メソッドを呼び出してプロパティ値を計算し、value を結果として返します。プロパティの get メソッドは、出力値を生成するためにメソッド内で必要となるアクションを行うことができます。

プロパティの get メソッドの例は、オンデマンドのデータ計算を参照してください。

依存プロパティをもつ set メソッドを使用するケース

依存プロパティには値が保存されませんが、依存プロパティに set メソッドを定義して、コードでプロパティを設定できるようにすることが可能です。

たとえば、propertyChange は、プロパティの名前を OldPropName から NewPropName に変更する値クラスです。古い名前を新しいユーザーに公開せずに、そのまま使用し続けることができます。古いプロパティ名をサポートするには、set メソッドと get メソッドをもつ依存プロパティとして OldPropName を定義します。非依存プロパティと同じように、値クラスの set メソッドは変更されたオブジェクトを返す必要があります。

classdef propertyChange
    properties
        NewPropName
    end
    properties (Dependent, Hidden)
        OldPropName
    end

    methods
        function obj = set.OldPropName(obj,val)
            obj.NewPropName = val;
        end
        function value = get.OldPropName(obj)
            value = obj.NewPropName;
        end
    end
end

新旧両方のプロパティ値を保存することによるメモリの浪費はありません。OldPropName にアクセスするコードは、引き続き想定どおりに動作します。OldPropNameHidden 属性を設定すると、新しいユーザーはこのプロパティを表示できなくなります。

プロパティの set メソッドから代入を行うと、設定対象のプロパティに対して定義された任意の set メソッドが実行されます。例は、オンデマンドのデータ計算を参照してください。

依存プロパティでのプライベートの set アクセス

値を返すためだけに依存プロパティを使用する場合、依存プロパティの set アクセス メソッドは定義しないでください。その代わり、依存プロパティの SetAccess 属性を private に設定します。たとえば、MaxValue プロパティに対する、以下の get メソッドを考えます。

methods
   function mval = get.MaxValue(obj)
      mval = max(obj.BigArray(:));
   end
end

この例では、MaxValue プロパティを使用して、クエリがあった場合のみに計算される値を返します。この場合、MaxValue プロパティをプライベートな依存プロパティとして定義します。

properties (Dependent, SetAccess = private)
   MaxValue
end

関連するトピック