目录
属性 set 方法
属性 set 方法语法
每当给属性赋值时,MATLAB® 都会调用属性的 set 方法。
注意:不能直接调用属性访问方法。MATLAB 会在访问属性值时调用这些方法。
属性 set 方法具有以下语法,其中 PropertyName 是属性的名称。
对于值类:
methods
function obj = set.PropertyName(obj,value)
...
end
-
obj - 其属性被赋值的对象
-
value - 要赋给属性的新值
值类 set 函数必须将修改后的对象返回给调用函数。句柄类不需要返回修改后的对象。
对于句柄类:
methods
function set.PropertyName(obj,value)
...
end
使用属性 set 方法的默认方法特性。定义 set 方法的方法代码块无法指定属性。
验证属性设置值
使用属性 set 方法验证即将分配给属性的值。属性 set 方法可以在采取存储新属性值所需的任何操作之前,对输入值执行错误检查等操作。
classdef MyClass
properties
Prop1
end
methods
function obj = set.Prop1(obj,value)
if (value > 0)
obj.Prop1 = value;
else
error('Property value must be positive')
end
end
end
end
有关属性 set 方法的示例,参考将属性限制为特定值。
调用 set 方法时
如果存在属性 set 方法,则只要给该属性赋值,MATLAB 就会调用该方法。但是,在以下情况下,MATLAB 不会调用属性 set 方法:
-
从它自己的属性 set 方法中为属性赋值时不会调用,这样可以防止出现对 set 方法的递归调用。但是,由 set 方法调用的函数在进行属性赋值时会调用 set 方法。
-
MATLAB 在调用对象构造函数之前,在对象初始化期间为属性赋值时。
-
当 MATLAB 复制值对象(任何不是handle 的对象)时,MATLAB 在将属性值从一个对象复制到另一个对象时,不会调用 set 或 get 方法。
-
当属性的 AbortSet 特性为 true 时,如果为属性赋的值与其当前值相同,也不会调用 set 方法。
在构造函数中设置属性值
在构造函数中设置属性值会引发对属性 set 方法的调用。例如,PropertySetMethod 类定义 Prop1 属性的属性 set 方法。
classdef PropertySetMethod
properties
Prop1 = "Default String"
end
methods
function obj = PropertySetMethod( str )
if nargin > 0
obj.Prop1 = str;
end
end
function obj = set.Prop1(obj,str)
obj.Prop1 = str;
fprintf( 'set.Prop1 method called. Prop1 = %s\n', obj.Prop1 );
end
end
end
如果调用不带输入参数的类构造函数,MATLAB 则不会调用 set.Prop1 方法。
>> o = PropertySetMethod
o =
PropertySetMethod with properties:
Prop1: "Default String"
在构造函数中设置属性值会引发对属性 set 方法的调用。
>> o = PropertySetMethod("New string")
set.Prop1 method called. Prop1 = New string
o =
PropertySetMethod with properties:
Prop1: "New string"
如果将对象复制到另一个变量,MATLAB 不会调用属性 set 方法,即使赋值中的右侧对象使用属性的非默认值也是如此:
a = o;
a.Prop1
a.Prop1
ans =
"New String"