主要内容

matlab.mixin.Copyable类

包裹:matlab。mixin包

为句柄对象提供复制功能的超类

描述

matlab.mixin.copeable.类是一个抽象的句柄类,提供了一个复制复制句柄对象的方法。这复制方法使对象的浅副本(即,它将所有从源对象复制到目标对象的所有非竞争属性)。马铃薯®不打电话复制递归地在属性值中包含的任何手柄上。

子类matlab.mixin.copeable.类的句柄类复制方法。复制方法复制数据而不调用类构造函数或属性集函数。因此,它没有任何副作用。

派生的子类可以自定义复制行为matlab.mixin.copeable.并覆盖这一点CopyElement.方法。有关更多信息,请参阅示例自定义子类复制行为

matlab.mixin.copeable.类是一个处理班级。

类属性

摘要
真正的
构造函数
真正的
handlecomatible.
真正的

有关类属性的信息,请参阅类属性

方法

展开全部

例子

添加复制方法

通过子类化将复制方法添加到句柄类中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.因为您可以创建的实例仅限于枚举块内部定义的实例。看定义枚举类有关枚举类的详细信息。

更多关于

展开全部

也可以看看

介绍了R2011a