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-2025 Octave中文网

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