34.6.5 值类与句柄类

有两种本质上不同类型的 classdef 类,其主要区别在于变量赋值时的行为。第一种类型是 值类

classdef value_class
  properties
    prop1
  endproperties

  methods
    function obj = set_prop1 (obj, val)
      obj.prop1 = val;
    endfunction
  endmethods
endclassdef

将该类的对象赋值给另一个变量时,本质上会创建一个新对象:

>> a = value_class ();
>> a.prop1 = 1;
>> b = a;
>> b.prop1 = 2;
>> b.prop1
⇒   ans =  2
>> a.prop1
⇒   ans =  1

但这也意味着,您可能必须手动将修改属性的方法的返回值赋值回原对象:

>> a = value_class ();
>> a.prop1 = 1;
>> a.set_prop1 (3);
⇒   ans =

<object value_class>

>> ans.prop1
⇒   ans =  3
>> a.prop1
⇒   ans =  1

第二种类型是 句柄类。这类类必须派生自抽象 handle 类:

classdef handle_class < handle
  properties
    prop1
  endproperties

  methods
    function set_prop1 (obj, val)
      obj.prop1 = val;
    endfunction
  endmethods
endclassdef

在以下示例中,变量 ab 引用同一个 handle_class 类的对象:

>> a = handle_class ();
>> a.prop1 = 1;
>> b = a;
>> b.prop1 = 2;
>> b.prop1
⇒   ans =  2
>> a.prop1
⇒   ans =  2

由句柄类的方法修改的对象属性会持续更改:

>> a.set_prop1 (3);
>> a.prop1
⇒   ans =  3

版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4