依存プロパティの get メソッドおよび set メソッド
依存プロパティにはデータが保存されません。依存プロパティの値は、非依存プロパティの値などの他の値に依存します。次の構文を使用して依存プロパティを定義します。
properties (Dependent) PropertyName end
依存プロパティではデータを保存しないため、プロパティがクエリされたときにプロパティの値が決定されるよう、get メソッド (get.
) を定義しなければなりません。 PropertyName
依存プロパティでは set メソッド (set.
) も設定できますが、set メソッドは実際には依存プロパティの値を設定できません。しかし、set メソッドにはその他のコードを含めることができます。たとえば、依存プロパティに関連するプロパティの値を設定できます。PropertyName
get メソッドおよび set メソッドの定義の紹介については、プロパティの get メソッドおよび set メソッドを参照してください。
依存プロパティの get メソッドの定義
Account
クラスは米ドルで金額を保存し、次の 3 つの通貨のいずれかで換算された値を返すことができます。米ドル、ユーロ、日本円。換算された値は依存プロパティ Balance
によって表されます。get.Balance
メソッドは USDollarAmount
および Currency
を使用して為替レートを判別し、Balance
プロパティを計算します。
classdef Account properties Currency {mustBeMember(Currency,["USD","EUR","JPY"])} = "USD" USDollarAmount = 0 end properties (Dependent) Balance end methods function value = get.Balance(obj) c = obj.Currency; switch c case "EUR" v = obj.USDollarAmount/0.98; case "JPY" v = obj.USDollarAmount/0.0069; otherwise v = obj.USDollarAmount; end value = v; end end end
Account
のインスタンスを作成します。USDollarAmount
プロパティと Currency
プロパティを設定します。
a = Account;
a.USDollarAmount = 100;
a.Currency = "JPY";
get メソッドを明示的に呼び出すことはできません。Balance
にアクセスすると、MATLAB® が get メソッドを呼び出して円に換算された最初の金額を返します。
a.Balance
ans = 1.4493e+04
MATLAB はオブジェクトを表示する際にも get メソッドを呼び出します。ステートメントをセミコロンで終了せずに Currency
をユーロに設定した場合、MATLAB は Balance
get メソッドを呼び出して更新された値を表示します。
a.Currency = "EUR"
a = Account with properties: Currency: "EUR" USDollarAmount: 100 Balance: 102.0400
依存プロパティをもつ set メソッドを使用するケース
依存プロパティでは値が保存されませんが、その値に対して set メソッドを定義することはできます。set メソッドでは依存プロパティの値を設定できませんが、その他のコードを実行することはできます。
たとえば、propertyChange
が、OldPropName
という名前のプロパティを最初に定義した値クラスであるものとします。set メソッドを使用して、クラス ユーザーの観点からプロパティ名を変更できます。
OldPropName
を依存および非表示として再定義します。OldPropName
を置き換える名前を使用して新しいプロパティを定義します。NewPropName
に値を保存するOldPropName
の set メソッドを定義します。NewPropName
に保存された値を返すOldPropName
の get メソッドを定義します。
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
を非表示にすることで、新しいユーザーに古いプロパティ名が表示されるのを防ぐことができます。
たとえば、propertyChange
のインスタンスを作成します。古いプロパティ名を使用してプロパティ値を設定してから、オブジェクトを表示します。MATLAB はその値を新しい名前のプロパティに設定し、表示します。
a = propertyChange;
a.OldPropName = "hello"
p = propertyChange with properties: NewPropName: "hello"