属性 get 和 set 方法
您可以定义属性 get 和 set 方法,每当访问关联的属性时,MATLAB® 都会自动调用这些方法。要将 get 或 set 方法与给定的属性相关联,请分别使用 get. 和 PropertyNameset. 形式来命名 get 和 set 方法。 PropertyName
除了访问属性之外,get 和 set 方法还可以执行额外的步骤操作。使用 get 方法可以:
计算从属属性的值。
以不同于呈现给用户的格式存储数据。
使用 set 方法可以:
设计比内置验证方法支持的更复杂的属性验证。
发出自定义错误消息。
执行作为属性值更改直接结果的操作,如建立或更新与硬件设备的连接或打开文件,从而确保对资源的访问。
get 和 set 方法确实会增加类的开销。在频繁访问的属性的 get 和 set 方法中,请避免复杂和计算量大的运算。
注意
您无法直接调用本主题中所述的 get 和 set 方法。当您访问属性值时,MATLAB 会自动调用这些方法。有关实现用户可调用的 get 和 set 方法的信息,请参阅为属性实现 set/get 接口。
属性 get 方法
您可以定义一个 get 方法,以便每当查询关联的属性值时,MATLAB 都会自动调用该方法。该 get 方法必须返回属性值。get 方法使用如下语法,其中 PropertyName 是属性的名称。
methods
function value = get.PropertyName(obj)
...
end
end定义 get 或 set 方法的方法块无法指定属性。
例如,triangleArea 类为 Area 属性定义 get 方法。Area 定义为从属属性,这意味着它不存储值。Area 的 get 方法按需计算值。(有关从属属性的详细信息,请参阅从属属性的 get 和 set 方法。)
classdef triangleArea properties Base = 1 Height = 1 end properties (Dependent) Area end methods function a = get.Area(obj) disp("Executing get.Area method.") a = 0.5*obj.Base*obj.Height; end end end
创建一个 triangleArea 的实例。
a = triangleArea
a =
Executing get.Area method.
triangleArea with properties:
Base: 1
Height: 1
Area: 0.5000当显示对象时,MATLAB 为其显示的属性调用任何已定义的 get 方法。在本例中,它调用 get.Area,并根据 Base 和 Height 的默认值计算 Area 的值。如果 get 方法出错,MATLAB 会隐藏错误并从显示中省略该属性。
更改 Base 和 Height 的值,并再次访问 Area。
a.Base = 3; a.Height = 4; a.Area
Executing get.Area method.
ans =
6get 方法用法
get 方法不以递归方式调用。
当复制值对象(即不从
handle类派生)时,在将属性值从一个对象复制到另一个对象时,不调用 get 方法。
属性 set 方法
您可以定义一个 set 方法,以便每当关联的属性赋值时,MATLAB 都会自动调用该方法。根据类是值类还是句柄类,set 方法使用以下语法:
值类 set 方法必须返回修改后的对象。
methods function obj = set.PropertyName(obj,value) ... end end句柄类 set 方法不需要返回修改后的对象。
methods function set.PropertyName(obj,value) ... end end
定义 get 或 set 方法的方法块无法指定属性。
例如,symPosDef 使用一个 set 方法进行属性验证。当 inputMatrix 属性设置为新值时,set 方法调用 chol 函数以确定输入矩阵是否为对称正定矩阵。如果是,该方法将 inputMatrix 设置为该值。如果不是,该方法将返回一条自定义错误消息。
classdef symPosDef properties inputMatrix = [1 0; 0 1] end methods function obj = set.inputMatrix(obj,val) try chol(val) obj.inputMatrix = val; catch ME error("inputMatrix must be symmetric positive definite.") end end end end
创建一个 symPosDef 的实例,并尝试将 inputMatrix 设置为非对称正定矩阵的值。
s = symPosDef; s.inputMatrix = [1 2; 1 1]
Error using symPosDef/set.inputMatrix inputMatrix must be symmetric positive definite.
set 方法用法
set 方法不以递归方式调用。
MATLAB 在对象初始化期间向属性赋予默认值时,不调用 set 方法。但是,在构造函数中设置属性值会调用 set 方法。
MATLAB 在加载对象时调用 set 方法。
当 MATLAB 复制值对象(任何非
handle对象)时,在将属性值从一个对象复制到另一个对象时,不会调用 set 方法。如果定义属性时其
AbortSet特性等于true,则在所赋的值与当前值相同时,不会调用该属性的 set 方法。但是,如果该属性具有 get 方法,会调用 get 方法以便可以比较这些值。有关此属性的详细信息,请参阅Assignment When Property Value Is Unchanged。