实现对复制的句柄类

复印方法句柄类

复制在指相同的对象另一手柄可变手柄变化的结果。您可以通过继承增加复制功能的手柄类matlab.mixin.Copyable。继承复制方法使您可以在类对象的浅拷贝。该CopyObj类节目的复制操作的行为。

classdefCopyObj 性能支柱结束结束

创建的对象CopyObj类和分配的手柄线对象属性支柱

A = CopyObj;a.Prop =线;

复制的对象。

B =拷贝(一);

确认把手变量一个b引用不同的对象。

一个== b
ANS = 0逻辑

但是,那线对象称为由a.Prop尚未被复制。手柄中所含a.Prop指的是相同的对象句柄包含在b.Prop

a.Prop == b.Prop
ANS =逻辑1

有关复印操作的行为的更多详细信息,请参阅复制

自定义复印操作

从派生类自定义处理对象复制行为matlab.mixin.Copyable。该matlab.mixin.Copyable类是一个抽象基类,从手柄类派生。matlab.mixin.Copyable提供了通过定义自定义对象的复制操作的模板:

  • 复制- 密封方法,该方法定义了复制对象的界面

  • copyElement- 受保护的方法子类可以重写自定义对象的复制操作的子类

matlab.mixin.Copyable复制方法,调用copyElement方法。子类通过定义自己的定制版本的复制操作copyElement

的默认实现copyElement使得所有的非依赖特性的浅拷贝。copyElement拷贝每一个属性值,并为其分配到新的(复制)属性。如果属性值是一个句柄对象,copyElement副本手柄,而不是基础数据。

要针对不同性质实现不同的复制行为,越权copyElement。例如,copyElement的方法SpecializedCopy类:

  • 创建一个新的类对象

  • 拷贝的价值PROP1新对象

  • 重新初始化的默认值PROP2通过创建副本时添加时间戳

classdefSpecializedCopy 性能PROP1 PROP2 = datestr(现在)结束方法(接入=保护)功能CP = copyElement(OBJ)CP = SpecializedCopy;cp.Prop1 = obj.Prop1;cp.Prop2 = datestr(现在);结束结束结束

创建该类的一个对象,并分配一个值到PROP1

A = SpecializedCopy;a.Prop1 = 7
A = SpecializedCopy与属性:PROP1:7 PROP2:'17 -Feb-2015十七时51分23' 秒

使用继承复制方法创建的副本一个

B =拷贝(a)中
B = SpecializedCopy与属性:PROP1:7 PROP2:'17 -Feb-2015十七时51分58' 秒

副本(对象b)具有用于相同的值PROP1,但子类copyElement方法分配一个新的值,以PROP2。注意不同的时间戳。

包含把手副本属性

复制对象还复制对象的属性的值。对象属性可以包含其他对象,包括手柄对象。如果你简单地复制包含手柄对象中的属性值,你实际上是复制了手柄,而不是对象本身。因此,您的副本引用相同的对象与原始对象。从派生的类matlab.mixin.Copyable类可以自定义类的复制方法复制对象的方式。

类支撑柄复制金宝app

假设你定义一个类,其存储的对象属性的句柄。你希望能够复制类的对象,希望对象的每个副本是指一个新的处理对象。使用以下步骤自定义类的复制行为:

  • 创建的子类matlab.mixin.Copyable

  • 覆盖copyElement对如何控制含手柄财产被复制。

  • 由于属性值是一个句柄,创建相同类的新的默认对象。

  • 从原来的处理对象为新的处理对象复制属性值。

HandleCopy类定制复制操作对包含手柄对象的属性。该ColorProp类定义了处理对象分配到PROP2

创建一个对象,并指派属性值:

A = HandleCopy;a.Prop1 = 7;a.Prop2 = ColorProp;

请使用对象的副本复制方法从继承matlab.mixin.Copyable

B =拷贝(一);

演示手柄对象包含由对象一个b是独立的。改变在对象的值一个不影响对象b

a.Prop2.Color = '红';b.Prop2.Color
ANS =蓝

HandleCopy

HandleCopy定制类为这个类的对象复制操作。

classdefHandleCopy 性能PROP1浅%副本PROP2%拉手副本结束方法(接入=保护)功能CP = copyElement(OBJ)浅%复制对象CP = copyElement@matlab.mixin.Copyable(OBJ);%以上PROP2获取手柄hobj = obj.Prop2;%创建默认对象new_hobj = EVAL(类(hobj));%以上原稿对象添加公共属性值HandleCopy.propValues(new_hobj,hobj);%分配新对象财产cp.Prop2 = new_hobj;结束结束方法(静态的)功能propValues(newObj,orgObj)PL =属性(orgObj);对于K = 1:长度(PL)如果isprop(newObj,PL {K})newObj(PL {K})= orgObj(PL {K})。。结束结束结束结束结束

ColorProp

ColorProp类通过分配RGB值,以限定出其颜色颜色属性。

classdefColorProp <手柄性能颜色='蓝色';结束结束

从复制排除属性

使用不可复制property属性来表示你不想复制操作来复制特定的属性值。默认情况下,不可复制,表明属性值是能够复制。您可以设置不可复制真正仅在手柄类的属性。

对于从派生的类matlab.mixin.Copyable,默认实现copyElement荣誉不可复制属性。因此,如果财产拥有不可复制属性设置为真正, 然后copyElement不会复制属性的值。如果重写copyElement在你的子类,你可以选择如何使用不可复制属性。

将此属性设置为不可复制

不可复制真正在属性块:

性能(不可复制)PROP1结束

默认值

如果这是不可拷贝一个属性在类定义指定一个默认值,复印操作将指定默认值的属性。例如,CopiedClass分配一个默认值,以PROP2

classdefCopiedClass 性能(不可复制)PROP1 PROP2 = datestr(现在)%指定当前时间结束结束

创建一个对象,以复制和值分配给PROP1

A = CopiedClass;a.Prop1 = 7
A = CopiedClass与属性:PROP1:7 PROP2:'17 -Feb-2015十五时19分34' 秒

复制一个b使用复制方法从继承matlab.mixin.Copyable

B =拷贝(a)中
B = CopiedClass与属性:PROP1:[] PROP2:'17 -Feb-2015 15点19分34' 秒

在副本b, 的价值PROP1是不可复制的。的价值PROP2被设置为默认值,其中MATLAB®当确定第一加载的类。时间戳不会改变。

带有动态属性的对象

的子类dynamicprops类允许您将属性添加到一个类的对象。当一个类衍生自dynamicprops也是一个子类matlab.mixin.Copyable,默认实现copyElement不复制的动态性能。默认值不可复制真正动态特性。

的默认实现copyElement荣誉动态属性的值不可复制属性。如果你想允许动态属性的复制,设置其不可复制属性。复制动态属性复制属性值和属性的属性值。

例如,该复制拷贝操作的动态特性,DynoProp, 因为它是不可复制属性被设置为。物体OBJ必须是一个类的实例,从两个导出dynamicpropsmatlab.mixin.Copyable

OBJ =MyDynamicClass;P = addprop(OBJ,'DynoProp');p.NonCopyable = FALSE;OBJ2 =拷贝(OBJ);

也可以看看

相关话题