复制一个句柄变量会产生另一个引用同一对象的句柄变量。可以通过子类化将复制功能添加到句柄类中matlab.mixin.Copyable
。继承的复制
方法使您能够创建类对象的浅副本。这CopyObj
类显示复制操作的行为。
classdefCopyObj < matlab.mixin.Copyable属性道具结尾结尾
创建的对象CopyObj
类的句柄并赋值行
对财产的反对道具
。
A = CopyObj;a.Prop =线;
复制的对象。
B =拷贝(一);
确认把手变量一种
和B.
参考不同的对象。
a = =
逻辑0
然而行
所指对象a.Prop
尚未被复制。手柄中所含a.Prop
中包含的句柄引用同一对象b.Prop
。
a.Prop == b.Prop
逻辑1
有关复印操作的行为的更多详细信息,请参阅matlab.mixin.Copyable.copy
。
通过派生类自定义句柄对象复制行为matlab.mixin.Copyable
。这matlab.mixin.Copyable
类是从句柄类派生出来的抽象基类。matlab.mixin.Copyable
提供自定义对象复制操作的模板,方法如下:
matlab.mixin.Copyable.copy
- 密封方法,该方法定义了复制对象的界面
matlab.mixin.Copyable.copyElement
-受保护的方法,子类可以重写该方法来自定义子类的对象复制操作
这matlab.mixin.Copyable
复制
方法,调用copyElement
方法。子类通过定义自己的定制版本的复制操作copyElement
。
的默认实现copyElement
创建所有非依赖属性的浅拷贝。copyElement
拷贝每一个属性值,并为其分配到新的(复制)属性。如果属性值是一个句柄对象,copyElement
副本手柄,而不是基础数据。
要针对不同性质实现不同的复制行为,越权copyElement
。例如,copyElement
的方法SpecializedCopy
班级:
创建一个新的类对象
拷贝的价值Prop1
到新对象
重新初始化的默认值Prop2
通过添加复制时的时间戳
classdefSpecializedCopy < matlab.mixin.Copyable属性PROP1 PROP2 = datestr(现在)结尾方法(访问=保护)函数cp = copelement (obj) cp = SpecializedCopy;cp.Prop1 = obj.Prop1;cp.Prop2 = datestr(现在);结尾结尾结尾
创建该类的一个对象,并分配一个值到Prop1
:
一个= SpecializedCopy;a.Prop1 = 7
A = SpecializedCopy与属性:PROP1:7 PROP2:'17 -Feb-2015 17点51分23' 秒
使用继承复制
方法创建副本一种
:
b =复制(a)
b = SpecializedCopy with properties: Prop1: 7 Prop2: '17-Feb-2015 17:51:58'
复制(对象B.
)具有用于相同的值Prop1
,而是子类copyElement
方法分配一个新的值,以Prop2
。注意不同的时间戳。
复制对象还复制对象的属性的值。对象属性可以包含其他对象,包括手柄对象。如果你简单地复制包含手柄对象中的属性值,你实际上是复制了手柄,而不是对象本身。因此,您的副本引用相同的对象与原始对象。从派生的类matlab.mixin.Copyable
类可以自定义复制方法复制类对象的方式。
假设你定义一个类,其存储的对象属性的句柄。你希望能够复制类的对象,希望对象的每个副本是指一个新的处理对象。使用以下步骤自定义类的复制行为:
创建的子类matlab.mixin.Copyable
。
覆盖copyElement
对如何控制含手柄财产被复制。
因为属性值是句柄,所以创建一个相同类的新默认对象。
从原来的处理对象为新的处理对象复制属性值。
这HandleCopy类定制复制操作对包含手柄对象的属性。这ColorProp类定义要赋值的句柄对象Prop2
:
创建一个对象并分配属性值:
一个= HandleCopy;a.Prop1 = 7;a.Prop2 = ColorProp;
方法复制对象复制
方法继承自matlab.mixin.Copyable
:
B =拷贝(一);
表明处理对象包含由对象一种
和B.
是独立的。改变在对象的值一种
不影响对象B.
:
a.Prop2。颜色='red'; b.Prop2.Color
ans =蓝色
这HandleCopy
定制类为这个类的对象复制操作。
classdefHandleCopy < matlab.mixin.Copyable属性Prop1%浅拷贝Prop2%拉手副本结尾方法(访问=保护)函数CP = copyElement(OBJ)%浅拷贝对象CP = copyElement@matlab.mixin.Copyable(OBJ);%以上PROP2获取手柄hobj = obj.Prop2;创建默认对象new_hobj = EVAL(类(hobj));从orig对象中添加公共属性值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(now)%指定当前时间结尾结尾
创建要复制并赋值的对象Prop1
:
A = CopiedClass;a.Prop1 = 7
A = CopiedClass与属性:PROP1:7 PROP2:'17 -Feb-2015 15点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);