34.6.5值类和句柄类

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

classdef value_class属性prop1 endproperties方法函数obj=set_prop1(obj,val)obj.prop1=val;endfunction endmethodsendclassdef

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

>>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

第二类是句柄类.那些类必须派生自抽象句柄

classdef handle_class<handle properties prop1 endproperties methods函数set_prop1(obj,val)obj.prop1=val;endfunction endmethodsendclassdef

在以下示例中,变量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 Octave中文网

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