このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
依存プロパティの set および get メソッド
依存プロパティにはデータが保存されません。依存プロパティの値は、非依存プロパティの値などの他の値に依存します。
依存プロパティでは、プロパティがクエリされたときにプロパティの値が決定されるよう、get アクセス メソッド (get.
) を定義しなければなりません。 PropertyName
依存プロパティの get メソッドから返される値は、isequal
と isequaln
を使用してオブジェクトの等価性をテストする際に考慮されません。
依存プロパティの値を設定できるようにするには、そのプロパティで set アクセス メソッド (set.
) を定義しなければなりません。プロパティの set アクセス メソッドは、通常、値を保管するために別の非依存プロパティに値を代入します。PropertyName
たとえば、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
にアクセスするコードは、引き続き想定どおりに動作します。OldPropName
の Hidden
属性を設定すると、新しいユーザーはこのプロパティを表示できなくなります。
プロパティの 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