从属属性的 get 和 set 方法
从属属性不存储数据。从属属性的值依赖其他值,例如非从属属性的值。使用以下语法定义从属属性:
properties (Dependent) PropertyName end
由于从属属性不存储数据,因此您必须定义 get 方法 (get.
) 以在查询属性时确定属性的值。 PropertyName
从属属性也可以有 set 方法 (set.
),但这些方法实际上无法设置从属属性的值。不过,set 方法可以包含其他代码。例如,它可以设置与从属属性相关的属性的值。PropertyName
有关定义 get 和 set 方法的介绍,请参阅属性 get 和 set 方法。
为从属属性定义 get 方法
Account
类存储以美元表示的金额,它可以用以下三种货币之一返回该值:美元、欧元或日元。转换后的值由从属 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
的名称定义一个新属性。为
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"