Main Content

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

依存プロパティにはデータが保存されません。依存プロパティの値は、非依存プロパティの値などの他の値に依存します。次の構文を使用して依存プロパティを定義します。

properties (Dependent)
   PropertyName
end

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

依存プロパティでは set メソッド (set.PropertyName) も設定できますが、set メソッドは実際には依存プロパティの値を設定できません。しかし、set メソッドにはその他のコードを含めることができます。たとえば、依存プロパティに関連するプロパティの値を設定できます。

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"

関連するトピック