Main Content

属性 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 方法。有关此属性的详细信息,请参阅Assignment When Property Value Is Unchanged

在构造函数中设置属性值

在构造函数中设置属性值会引发对属性 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"

相关主题