Main Content

从属属性的 get 和 set 方法

从属属性不存储数据。从属属性的值依赖其他值,例如非从属属性的值。使用以下语法定义从属属性:

properties (Dependent)
   PropertyName
end

由于从属属性不存储数据,因此您必须定义 get 方法 (get.PropertyName) 以在查询属性时确定属性的值。

从属属性也可以有 set 方法 (set.PropertyName),但这些方法实际上无法设置从属属性的值。不过,set 方法可以包含其他代码。例如,它可以设置与从属属性相关的属性的值。

有关定义 get 和 set 方法的介绍,请参阅属性 get 和 set 方法

为从属属性定义 get 方法

Account 类存储以美元表示的金额,它可以用以下三种货币之一返回该值:美元、欧元或日元。转换后的值由从属 Balance 属性表示。get.Balance 方法使用 USDollarAmountCurrency 来确定转换率以计算 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 的实例。设置 USDollarAmountCurrency 属性。

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 的名称定义一个新属性。

  • OldPropName 定义一个 set 方法,该方法将值存储在 NewPropName 中。

  • OldPropName 定义一个 get 方法,该方法返回存储在 NewPropName 中的值。

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"

相关主题