为句柄对象提供复制功能的超类
这matlab.mixin.copeable.
类是一个抽象的句柄类,提供了一个复制
复制句柄对象的方法。这复制
方法使对象的浅副本(即,它将所有从源对象复制到目标对象的所有非竞争属性)。马铃薯®不打电话复制
递归地在属性值中包含的任何手柄上。
子类matlab.mixin.copeable.
类的句柄类复制
方法。复制方法复制数据而不调用类构造函数或属性集函数。因此,它没有任何副作用。
派生的子类可以自定义复制行为matlab.mixin.copeable.
并覆盖这一点CopyElement.
方法。有关更多信息,请参阅示例自定义子类复制行为.
这matlab.mixin.copeable.
类是一个处理
班级。
通过子类化将复制方法添加到句柄类中matlab.mixin.copeable.
.
Classdef.myclass属性道具结尾结尾
创建一个对象。
a = myclass;
创建对象的副本。
b =副本(a);
有关更多信息,请参见为处理类实施副本.
这复制
方法提供用于复制行为的公共的、不可重写的接口。该方法接受一个对象数组作为输入,并返回相同维数的数组。
CopyElement.
是一种受保护的方法复制
方法用于在输入阵列中的每个对象上执行复制操作。你可以覆盖CopyElement.
在您的子类中自定义继承的行为复制
方法。
使用物业不可能
属性来控制复制操作复制特定属性值。
控件覆盖CopyElement.
在子类中的方法matlab.mixin.copeable.
实施特定类别的深副本处理
对象。
考虑以下课程:
ContainsHandles
- 子类matlab.mixin.copeable.
那个包含处理
两个属性的对象
DeepCp
- 子类matlab.mixin.copeable.
浅滩
- 子类处理
下面是简化的类定义。
Classdef.包含ashandles属性prop1 prop2 deepobj.%包含Deepcp对象ShallowObj%包含一个Dramentcp对象结尾方法函数obj = ContainsHandles (val1, val2、deepobj shallowobj)如果nargin> 0 obj.prop1 = val1;obj.prop2 = val2;obj.deepobj = deepobj;obj.shallowobj = drultobj;结尾结尾结尾方法(访问=保护)%覆盖copelement方法:函数cpObj = copyElement (obj)%制作了所有四个属性的浅副本cpObj = copyElement@matlab.mixin.Copyable (obj);%深度复制DeepCp对象cpobj.deepobj = copy(obj.deepobj);结尾结尾结尾
这DeepCp
班级来自matlab.mixin.copeable.
.
Classdef.Deepcp属性dpprop.结尾方法函数obj = deepcp(val)......结尾结尾结尾
这处理
班级浅滩
没有得出matlab.mixin.copeable.
因此,没有复制
方法。
Classdef.浅滩<句柄属性Shprop.结尾方法函数obj = dramenccp(val)......结尾结尾结尾
创建一个ContainsHandles
对象,其中包含两个句柄对象dpprop.
和Shprop.
属性。
SC =浅滩(7);DC = Deepcp(7);a =包含股份(4,5,DC,SC);A.Deepobj.
ANS =具有属性的Deepcp:DPProp:7
a.ShallowObj.ShProp
ShProp: 7
制作副本ContainsHandles
对象。
b =副本(a);
返回的副本B.
包含对象的浅拷贝SC.
,以及物体的深层拷贝DC.
.也就是说,DC.
对象传递给ContainsHandles
由于复制操作,构造函数现在是一个新的独立对象。你现在可以改变DC.
对象,但不影响复制。这不是浅复制对象的情况,SC.
.
更改句柄对象的属性值。
sc.ShProp = 5;直流。DpProp = 5;
请注意,深度复制的对象不受影响。
b.DeepObj
ANS =具有属性的Deepcp:DPProp:7
浅层复制的对象仍然引用相同的数据。
b.ShallowObj
ans = ShallowCp与属性
这CopyElement.
超类中的方法无法访问子类中的私有数据。
如果你覆盖CopyElement.
在一个子类中matlab.mixin.copeable.
,然后使用这个子类作为超类,您需要重写CopyElement.
在包含私有属性的所有子类中。覆盖CopyElement.
在子类应该叫做CopyElement.
在相应的超类中,如前面的例子。
下面的简化代码演示了这种方法。
Classdef.超类属性(Access = private结尾方法......函数cpObj = copyElement (obj)......cpObj = copyElement@matlab.mixin.Copyable (obj);......结尾结尾结尾Classdef.SubClass1 <超类属性(访问=私人)sub_prop1结尾方法函数cpObj = copyElement (obj)% super_prop副本cpObj = copyElement@SuperClass (obj);%复制子类中的子类_prop1%分配可以引入副作用cpobj.sub_prop1 = obj.sub_prop1;结尾结尾结尾
覆盖CopyElement.
在SubClass1
复制私有子类属性,因为父类不能访问子类中的私有数据。
笔记
分配sub_prop1.
在覆盖CopyElement.
在SubClass1
调用属性集方法(如果存在),可能会给复制操作带来副作用。
考虑打电话给matlab.mixin.copeable.
复制
表格填写方法:
b =副本(a);
这个电话复制
生成对以下每个条件描述的结果:
一种
有动态属性 -复制
不复制动态属性。如果需要,您可以在子类中实现动态属性复制。
一种
没有不相关的属性-复制
在不调用类构造函数避免引入副作用的情况下创建一个没有属性值的新对象。
一种
包含删除的句柄-复制
在输出阵列中创建已删除的句柄。
一种
有附带的听众 -复制
不复制侦听器。
一种
包含枚举类对象 - 枚举类无法子类matlab.mixin.copeable.
.
一种删除
方法调用复制
-复制
创建一个合法的副本,遵守适用于任何其他用法的所有行为。
笔记
派生枚举类matlab.mixin.copeable.
因为您可以创建的实例仅限于枚举块内部定义的实例。看定义枚举类有关枚举类的详细信息。