复制一个句柄变量会产生另一个引用同一对象的句柄变量。可以通过子类化将复制功能添加到句柄类中matlab.mixin.copeable.
。继承的复制
方法使您能够创建类对象的浅副本。这CopyObj
类显示复制操作的行为。
Classdef.CopyObj < matlab.mixin.Copyable属性道具结尾结尾
创建一个对象CopyObj
类的句柄并赋值行
对财产的反对道具
。
a = copyobj;A.Prop =行;
复制对象。
b =副本(a);
确认句柄变量一种
和B.
参考不同的对象。
a = =
逻辑0
然而行
所指对象A.Prop.
尚未复制。把手包含在A.Prop.
中包含的句柄引用同一对象B.Prop.
。
A.Prop == B.Prop.
逻辑1
有关复制操作行为的更详细信息,请参阅复制
。
通过派生类自定义句柄对象复制行为matlab.mixin.copeable.
。这matlab.mixin.copeable.
类是从句柄类派生出来的抽象基类。matlab.mixin.copeable.
提供自定义对象复制操作的模板,方法如下:
复制
- 密封方法,用于定义复制对象的接口
CopyElement.
-受保护的方法,子类可以重写该方法来自定义子类的对象复制操作
这matlab.mixin.copeable.
复制
方法,拨打电话CopyElement.
方法。您的子类通过定义自己的版本来定制复制操作CopyElement.
。
的默认实现CopyElement.
创建所有非依赖属性的浅拷贝。CopyElement.
复制每个属性值并将其分配给新的(复制的)属性。如果属性值是句柄对象,CopyElement.
复制句柄,但不是底层数据。
实现不同属性的不同拷贝行为,覆盖CopyElement.
。例如,CopyElement.
的方法专业综合性
班级:
创建一个新的类对象
复制价值Prop1
到新对象
重新初始化默认值Prop2
通过添加复制时的时间戳
Classdef.SpecializedCopy < matlab.mixin.Copyable属性prop1 prop2 = datestr(现在)结尾方法(访问=保护)函数cp = copelement (obj) cp = SpecializedCopy;cp.Prop1 = obj.Prop1;cp.Prop2 = datestr(现在);结尾结尾结尾
创建类的对象并为其分配值Prop1
:
一个= SpecializedCopy;A.Prop1 = 7.
a =具有属性的专业化文件: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.copeable.
类可以自定义复制方法复制类对象的方式。
假设您定义了一个存储句柄在对象属性中的类。您希望能够复制类的对象,并希望对象的每个副本引用新的句柄对象。使用以下步骤自定义类副本行为:
创建一个子类matlab.mixin.copeable.
。
覆盖CopyElement.
控制如何复制包含句柄的属性。
因为属性值是句柄,所以创建一个相同类的新默认对象。
将原始句柄对象的属性值复制到新句柄对象。
这手抄品类自定义包含句柄对象的属性的复制操作。这ColorProp.类定义要赋值的句柄对象Prop2
:
创建一个对象并分配属性值:
一个= HandleCopy;a.Prop1 = 7;a.Prop2 = ColorProp;
方法复制对象复制
方法继承自matlab.mixin.copeable.
:
b =副本(a);
证明对象包含的句柄对象一种
和B.
是独立的。更改对象的值一种
不影响对象B.
:
a.Prop2。颜色='red'; b.Prop2.Color
ans =蓝色
这手抄品
类自定义此类对象的复制操作。
Classdef.HandleCopy < matlab.mixin.Copyable属性Prop1%浅拷贝Prop2%句柄副本结尾方法(访问=保护)函数cp = copyElement(obj)%浅拷贝对象cp = copyelement@matlab.mixin.copeable(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值来定义颜色颜色
财产。
Classdef.colorprop属性颜色=“蓝”;结尾结尾
使用不可能
属性属性表示您不希望复制操作复制特定属性值。默认情况下,不可能
是错误的
,表示属性值是可复制的。你可以设置不可能
到真正的
仅在句柄类的属性上。
对于派生的课程matlab.mixin.copeable.
的默认实现CopyElement.
荣誉不可能
属性。因此,如果属性有其不可能
属性设置为真正的
, 然后CopyElement.
不会复制该属性的值。如果你覆盖CopyElement.
在子类中,可以选择如何使用不可能
属性。
放不可能
到真正的
在属性块中:
属性(非特性)PROP1结尾
如果未复制的属性具有在类定义中分配的默认值,则复制操作将默认值分配给属性。例如,copiedclass.
分配默认值Prop2
。
Classdef.copiedclass属性(不可复制)Prop1 Prop2 = datestr(now)%分配当前时间结尾结尾
创建要复制并赋值的对象Prop1
:
a = copiedclass;A.Prop1 = 7.
a =具有属性的copiedclass:prop1:7 prop2:'17 -feb-2015 15:19:34'
复制一种
到B.
使用复制
方法继承自matlab.mixin.copeable.
:
b =复制(a)
b =具有属性的CopiedClass:prop1:[] prop2:'17 -feb-2015 15:19:34'
在复制B.
, 的价值Prop1
没有复制。的价值Prop2
被设置为其默认值,Matlab®首次加载类时确定。时间戳不会改变。
子类的dynamicprops
类允许您为类的对象添加属性。当一个阶级派生dynamicprops
也是一个子类matlab.mixin.copeable.
的默认实现CopyElement.
不复制动态属性。默认值不可能
是真正的
用于动态属性。
的默认实现CopyElement.
尊重动态财产的价值不可能
属性。如果要允许动态属性的复制,请设置其不可能
属性来错误的
。复制动态属性复制属性值和属性属性的值。
例如,此副本操作复制了动态属性,DynoProp
, 因为它是不可能
属性设置为错误的
。的对象obj
必须是派生于两者的类的实例dynamicprops
和matlab.mixin.copeable.
:
obj =MyDynamicClass;p = addprop (obj,'dynoprop');p.noncopyable = false;obj2 = copy(obj);