复制在指相同的对象另一手柄可变手柄变化的结果。您可以通过继承增加复制功能的手柄类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
类可以自定义类的复制方法复制对象的方式。
假设你定义一个类,其存储的对象属性的句柄。你希望能够复制类的对象,希望对象的每个副本是指一个新的处理对象。使用以下步骤自定义类的复制行为:
创建的子类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
定制类为这个类的对象复制操作。
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
类通过分配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
必须是一个类的实例,从两个导出dynamicprops
和matlab.mixin.Copyable
:
OBJ =MyDynamicClass;P = addprop(OBJ,'DynoProp');p.NonCopyable = FALSE;OBJ2 =拷贝(OBJ);