文件

实现对复制的句柄类

复印方法句柄类

复制一个句柄变量会产生另一个引用同一对象的句柄变量。可以通过子类化将复制功能添加到句柄类中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复制方法,调用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类可以自定义复制方法复制类对象的方式。

类支撑柄复制万博1manbetx

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

  • 创建的子类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

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

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必须是派生于两者的类的实例dynamicpropsmatlab.mixin.Copyable

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

也可以看看

相关的话题

这个话题有用吗?